1.4 matplotlib

matplotlib用于绘图。这里我们展示一下matplotlib绘制二维图像和三维图像的能力。我们先来看一个二维图像的例子:

>>> import numpy as np
>>> import matplotlib.pylab as plt
>>> x = np.random.random(100)
>>> plt.plot(x)
>>> plt.show()

上述代码首先加载了numpy模块(matplotlib很适合处理NumPy数据),然后使用np.random. random生成了一个大小为100、取值区间为[0, 1)的随机数组x。最后使用plt.plot给数组x画图,并通过调用plt.show将绘制的图像输出。matplotlib的输出是交互式的。你可以动手试试绘图窗口的各项功能。例如,图1-1展示了Linux环境下绘图窗口的样子。由于画的是一个随机数组,因此每次图像的序列都是不同的,但绘图窗口的功能区是固定的。

图1-1 一个简单的matplotlib绘图窗口

下面我们再来试试三维数组:

>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pylab as plt
>>> import numpy as np
>>> x = np.random.random(20)
>>> y = np.random.random(20)
>>> z = np.random.random(20)
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
>>> ax.scatter(x,y,z)
>>> plt.show()

上述代码首先加载了三维坐标组件、matplotlib以及NumPy。然后用NumPy生成了3个取值区间为[0, 1)的随机数组,它们就是我们要画的三维数据点。接下来调用plt.figure和fig.add_subplot以设置三维投影图。参数111告诉matplotlib我们希望所有图片构成1 × 1的网格,并且把当前图片画到第一个格子里,所以111表明只有单张图片。参数projection用于设置三维绘图模式。最后用ax.scatter绘制散点图,并且通过调用plt.show将图片显示出来。使用matplotlib绘制的三维图像与二维图像一样,也是交互式的,可尝试用鼠标旋转图片。