8. 绘图和可视化——matplotlib
首先确定IPython 是以Pylab 模式启动的。
- 在命令行窗口(CMD窗口)输入 ipython --pylab
- 或者在ipython 环境下输入%pylab
绘制一条直线:
8.1 Figure和Subplot
matplotlib 的图像都位于Figure 对象中。 可以用plt.figure 创建一个新的Figure: 这时会弹出一个空窗口。
fig = plt.figure()
matplotlib 中的Figure 支持一种MATLAB 式的编号架构(eg. plt.figure(2))。通过plt.gcf() 即可得到当前Figure 的引用。
不能通过空Figure 绘图,必须用 add_subplot 创建一个或多个 subplot :
ax1 = fig.add_subplot(2, 2, 1)
这个代码的意思是,图像应该是 2*2 的,且当前选中的是4个 subplot 中的第一个。接着创建后面的:
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
结果:
此时,发出一条绘图命令,matplotlib 就会在最后一个用过的 subplot (如果没有则创建一个)上进行绘图。
from numpy.random import randn
plt.plot(randn(50).cumsum(), 'k--')
继续在其他两个subplot中画图:
_ = ax1.hist(randn(100), bins =20, color = 'k', alpha =0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3*randn(30))
结果:
8.2 subplots
(补)
8.3 颜色、标记和线型
matplotlib 的plot 函数接受一组(x, y)坐标,还可以接受有个表示颜色和线型的字符串缩写。
ax.plot(x, y, 'g--') #绿色虚线
等价于:ax.plot(x, y, linestyle='--', color='g') #绿色虚线
线型图可以加标记(marker),以强调实际的数据点。
!!!标记类型和线型必须放在颜色后面。
plt.plot(randn(30).cumsum(), 'ko--') #等价于
plt.plot(randn(30).cumsum(), color='k',linestyle='dashed', marker='o')
结果:
8.4 刻度、标签和图例
对于大多数的图标装饰项,主要实现方式有二:
-
- 使用过程型的pyplot 接口;
- 面向对象的原生matplotlib API 。
pyplot 接口的设计目的就是交互式使用,含有诸如xlim、xticks 和 xticklabels 之类的方法。分别控制图表的范围、刻度位置、刻度标签等。使用方式包括以下两种:
- 调用时不带参数,则返回当前的参数值。例如 plt.xlim() 返回当前的x 轴绘图范围。
- 调用时带参数,则设置参数值。因此,plt.xlim([0, 10]) 会将x 轴的范围设置为0到10。
8.5 设置标题、轴标签、刻度以及刻度标签
首先,我们创建一个简单的随机漫步图像来介绍:
fig3 = plt.figure()
ax = fig3.add_subplot(1,1,1)
ax.plot(randn(1000).cumsum())
结果:
设置 x 轴的刻度及刻度标签:
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation = 30, fontsize = 'small')
设置 x 轴的名称:
ax.set_xlabel('Stages')
图表添加图名:
ax.set_title('my first plot')
最终结果:
代码如下:
8.6 添加图例
图例( legend )是一种用于标识图表元素的重要工具。添加方式有两个:
- 在添加subplot 的时候传入 label 参数;
ax.plot(randn(1000).cumsum(), 'k--', label = 'first')
ax.plot(randn(1000).cumsum(), 'g--', label = 'second')
- 调用ax.legend() 或者plt.legend() 。
ax.legend(loc = 'best')
注: 要从图例中去除一个或多个元素,不传入label 或者传入 label = '_nolegend_' 即可。
8.7 注解以及在Subplot 上绘图
除标准的图标对象之外,有时候可能需要绘制一些自定义的注解(比如文本。箭头和其它图形等)。注释可以通过text 、arrow和annotate 等函数进行添加。
8.8 将图标保存到文件
保存的文件类型是通过文件扩展名推断出来的。我们保存图片时最常用的两个重要的选项是dpi (控制‘每英寸点数’分辨率)和 bbox_inches(可以剪除当前图表周围的空白部分)。
plt.savefig('E:\\python/123.png', dpi=400, bbox_inches = 'tight')
结果:
savefig 并非一定要写入磁盘,也可以写入任何文件型的对象,如StringIO:
from io import StringIO
buffer = StringIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()
这对在Web 上提供动态生成的图片时很实用的。
Figure。savefig 除了dpi 和bbox_inches 还有一些其他的选项:
8.9 matplotlib 配置
matplotlib自带一些配色方案,以及为生成出版质量的图片而设定的默认配置信息,可以管理图像的大小,subplot 边距、配色方案、字体大小、网格类型等。操作 matplotlib 配置系统的方式主要有两种。第一种是Python编程方式,即利用rc 方法。