绘图和可视化
绘图引用 import matplotlib.pyplot as plt
matplotlib 的图像都位于Figure 对象中。可以用plt.figure 创建一个新的Figure:
flg=plt.figure(), plt.figure 有一些选项,特别是figsize,它用于确保当图片保存到磁盘时具有一定的大小和纵横比。
不能通过空Figure 绘图。必须用add_subplot 创建一个或多个subplot才行:
ax1=fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
from numpy.random import randn
plt.plot(randn(50).cumsum(), 'k--')
plt.show()
'k--' 是一个线型选项,用于告诉matplotlib 绘制黑色虚线图。
plt.subplots 可以创建一个新的Figure,并返回一个已含有创建的subplot对象的Numpy 数组:
fig,axes=plt.subplots(2,3)
调整subplot周围的间距
plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
wspace=None, hspace=None)
wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。下面是一个简单的例子
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i, j].hist(randn(500), bins=50, color='k', alpha=0.5)
plt.subplots_adjust(wspace=0, hspace=0)
颜色、标记和线型
matplotlib的plot函数接受一组x和y坐标,还可以接受表示颜色和线型的字符串缩写。例如,要根据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='--',marker='o')
在线型图中,非实际数据点默认是按线性方式插值的。可以通过drawstyle选项修改:
data = randn(30).cumsum()
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')
通过一个例子进行演示
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum())
刻度、标签和图例
要修改X轴的刻度,最简单的办法是使用set_xticks 和 set_xticklabels。前者告诉matplotlib 要将刻度放在数据范围中的哪些位置,默认情况下,这些位置也就是刻度标签。但我们可以通过set_xticklabels 将任何其他的值用作标签:
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
rotation=30, fontsize='small')
最后,再用set_xlabel 为x轴设置一个名字,并用set_title 设置一个标题:
ax.set_title('My first matplotlib plot')
ax.set_xlabel('Stages')
添加图例
图例(legend)是另一种用于标识图表元素的重要工具。添加图例的方式有二。最简单的是在添加subplot的时候传入label参数:
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
在此之后,你可以调用ax.legend() 或 plt.legend() 来自动创建图例:
ax.legend(loc='best')
‘’best‘’是个不错的选择,它会选择最不碍事的位置。
注解以及在Subplot 上绘图
注解可以通过text , arrow 和 annotate 等函数进行添加 ,text 可以将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式
ax.text(x,y,'hello world!',family='monospace',fontsize=10)
要在图表添加一个图形,你需要创建一个块对象shp,然后通过ax.add_patch(shp) 将其添加到subplot中,如下所示:
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]],
color='g', alpha=0.5)
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
plt.show()