主要内容:Matplotlib库的绘图区域,以及3种子图的选取方式。
1.subplot()函数
import numpy as np
arr = np.arange(4)
plt.subplot(221)
plt.plot([1,2,3,4])
plt.subplot(224)
plt.plot(arr*arr)
plt.show()
输出:
plt.subplot(2,2,4)表示讲绘图区域分成两行两列,按照从左到右的顺序排列,选取第四块。
横向跨区域情况
我们在实际中会遇到一张图跨几个子图的情况,我们还是用行列来分。
import numpy as np
arr = np.arange(4)
plt.subplot(221)
plt.plot([1,2,3,4],color='r')
plt.subplot(222)
plt.plot(arr*arr,color='g')
plt.subplot(212)
plt.plot(arr*arr*arr,color='b')
plt.show()
输出:
从上面的两个子图的角度看,整个图被分成两行两列,他们呢分别是1,2的位置,所以选取他们用plt.subplot(221)和plt.subplot(222),从下面的跨区域子图来看,整个图被分成了两行1列,位于下面的是2,所以选取的是plt.subplot(212)。
纵向跨区域同样理解:
#纵跨区域情况
import numpy as np
arr = np.arange(4)
plt.subplot(221)
plt.plot([1,2,3,4],color='r')
plt.subplot(223)
plt.plot(arr*arr,color='g')
plt.subplot(122)
plt.plot(arr*arr*arr,color='b')
plt.show()
输出:
注意:subplot()函数与先创建画布fig = plt.figure() 然后使用ax = fig.add_subplot() 在画布里面添加子图是一样的效果。
2.subplot2gird()函数
当我们碰到更为复杂的绘图区域,使用subplot()函数会比较麻烦,这时候有一个更好用的subplot2grid()函数可以帮我们完成子图布局。
plt.subplot2gird(GridSpec,CurSpec,colspan=1,rowspan=1)
理念:设定网格,选中网格,确定选中的区域或数量,下标从0开始索引。
#复杂选取布局
plt.subplot2grid((3,3),(0,0),colspan=3)
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,1))
输出:
plt.subplot2grid((3,3),(0,0),colspan=3):可以(3,3)表示将整个图分成3行3列,每一个子图可以用坐标的形式选取(这里就是(0,0)),colspan和rowspan可以给定跨行或是跨列的数量默认是1。
3.GridSpec类
在matplotlib 中,存在一个模块gridspec。模块gridspec 是一个可以指定画布中子区位置或者说是布局的“分区”模块。在模块gridspec 中,有一个类GridSpec。类GridSpec 可以指定网格的几何形状,也就是说,可以划定一个子区的网格状的几何结构。
#使用GridSpec类创建子图
from matplotlib.gridspec import GridSpec
gs = GridSpec(3,3)
ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,0:2])
ax3 = plt.subplot(gs[1:,2])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])
输出:
GridSpec(3,3)可以将画图区域分成3*3的格子,我们可以将这些子区域看作3*3的二维数组,使用二维数组的切片来取子图的对应的跨行或是跨列的区域。