使用matplotlib绘图时通常会绘制子图用于清晰展示,我们通过subplot来绘制子图位置即可。
subplot通常用来定位的参数有三个(行数,列数,子图索引),三个参数用‘,’隔开,也可简化不写“,” 实例代码例如:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
def f(x):
'''定义要绘制的函数'''
return x**2
plt.figure(figsize=(10,10))#设置画布大小
x= np.linspace(0,2)
# 将画布分成2x1的布局,占用第1个(即第2行第1列的子图)
plt.subplot(211)
plt.plot(x,f(x))
plt.title("第一幅子图")
# 将画布分成2x3的布局,占用第4个(即第2行第1列的子图)
plt.subplot(234)
plt.plot(x,f(x))
plt.title("第二幅子图")
# 将画布分成2x3的布局,占用第5个(即第2行第2列的子图)
plt.subplot(235)
plt.plot(x,f(x))
plt.title("第三幅子图")
但是这种方法有个缺点,比如我想把上述的第三幅子图占据后面的两个子图的位置,用subplot的三个参数是无法做到的,那么这时我们就需要子图的网格布局。
subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
shape:网格的尺寸
loc:绘制子图位置
rowspan:轴向下跨距的列数。
colspan:轴向右跨距的行数。
为了实现让第三幅子图占两行,我们使用subplot2grid进行网格布局,
plt.figure(figsize=(12,8))
#在2行3列的表格中,第一行第一列的位置绘制一个轴向右跨距为3的子图
plt.subplot2grid((2,3) ,(0, 0), colspan=3)
plt.title("第一幅子图")
plt.plot(x,f(x))
#在2行3列的表格中,第2行第1列的位置绘制一个子图
plt.subplot2grid((2,3), (1, 0))
plt.title("第二幅子图")
plt.plot(x,f(x))
plt.subplot2grid((2,3) ,(1, 1), colspan=2)
plt.title("第三幅子图")
plt.plot(x,f(x))
更多布局:
fig = plt.figure(figsize=(15,15))
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)
ax1.set_title("第一幅子图")
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
ax2.set_title("第二幅子图")
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax3.set_title("第三幅子图")
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.set_title("第四幅子图")
ax5 = plt.subplot2grid((3, 3), (2, 1))
ax5.set_title("第五幅子图")
plt.show()