绘图是数据分析工作中最重要的任务之一,是探索过程的一部分,例如,帮助我们找出异常值、必要的数据转换、得出有关模型的idea等。此外,还可以利用诸如d3.js之类的工具为Web应用构建交互式图像。但是在这里主要讲解的是matplotlib,matplotlib是一个用于创建出版质量图表的桌面绘画包,其目的是为python构建一个MATLAB式的绘图接口。
Matplotlib api入门:
matplotlib API函数(如plot和close)都位于matplotlib.pyplot模块中,其通常的引入约定是:
import matplotlib.pyplot as plt
Figure和Subplot:
matplotlib的图像位于Figure对象中。你可以用plt.figure创建一个新的Figure,创建完之后会弹出一个空窗口:
fig = plt.figure()
plt.figure有一些选项,特别是figsize,它用于确保当图片保存到磁盘时具有一定大小和横纵比,通过plt.gcf()函数即可得到当前Figure的引用。
Figure只是弹出一个空白的窗口,不能通过Figure绘图,必须使用add_subplot()函数创建一个或多个subplot才行:
ax1 = fig.add_subplot(2,2,1)
这条代码的意思是:创建的2×2的subplot,且当前选中的是4个subplot中的第一个(编号从1开始),我们也可以依次创建出第二个、第三个:
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
如果这个时候发出一条绘图命令(如plt.plot([1.5,3.5,-2,1.6])),matplotlib就会在最后一个用过的subplot(如果没有就创建一个)上绘制,例如:
from numpy.random import randn
plt.plot(randn(50).cumsum(), 'k--')
其中"k--"是一个线型选项,用于告诉matplotlib绘制黑色虚线图。如果想对其他的subplot进行绘图的话,可以通过上面fig.add_subplot()函数返回的AxesSubplot对象进行绘制,即:
ax1.hist(randn(100), bins=20, color='k', alpha=0.3)
ax2.scatter(np.arange(30), np.arange(30)+3*randn(30))
还有一种比较轻松创建特定布局的Figure和subplot的方式,就是使用plt.subplots()函数,它可以创建一个新的Figure,并返回一个包含已创建的subplot对象的Numpy数组,可以轻松地对axes数组进行索引,就好像一个二维数组一样(例如axes[0,1]):
fig, axes = plt.subplots(2, 3)
pyplot.subplots()函数的具体参数如下所示:
默认情况下,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距,间距跟图像的高度和宽度有关,如果你调整了图像的大小其间距也会调整。我们可以利用Figure的subplot_adjust()函数可以轻而易举地修改间距,具体的函数如下所示:
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。下面是一个简单的例子,我们把间距收缩到了0: