matplotlib.pyplot使用for循环进行多个子图Subplot的绘制
一、matplotlib.pyplot绘制子图的基本方法
首先我们来了解一下,matplotlib中绘图需要使用到的元素 首先是figure图片对象,然后是图片对象包含的子图对象axes,再然后是每个子图对象的轴Axis对象。
我们要进行子图的绘制,首先我们要创建图片对象,然后再创建子图对象,在子图对象上进行绘制,可以使用多种方法。
第一种:
plt.figure()
plt.plot([1, 2, 3])
我们使用plt.figure()创建了一个图片对象,但是没有给这个图片对象指定引用,这里plt.plot()会自动在已经当前正在使用的figure上进行绘制。效果就如上图所示。
第二种: 创建子图对象然后进行绘制。
fig = plt.figure()
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)
ax1.plot([1,2,3])
ax2.scatter(1,1)
第三种: 同时创建figure和子图对象
fig, axes = plt.subplots(2, 2)
axes[0, 1].plot([1, 2, 3])
axes[1, 1].plot([1, 2, 3])
这里的axes是一个numpy的高维数组ndarray 我们不能直接对axes进行操作进行绘图,我们只能访问其中一个元素获得一个ax后然后再进行绘图。
二、使用for循环进行绘图的一种方法
当我们的绘图语句非常多的时候,代码会显得繁琐,我们需要一种方式来进行循环绘图,但是axes是个ndarray这就限制了我们使用for循环直接来迭代这个高维数组,这样的思路是行不通的,那我们换一个思路。既然axes的类型是ndarry,那么axes肯定有shape属性,可以访问axes的行和列数,这正好和我们指定子图的位置一致。
我们使用一个list,来保存axes中的每一个子图对象,这样我们接下来使用时就方便迭代了
fig, axes = plt.subplots(3, 3)
axes_list = []
for i in range(axes.shape[0]):
for j in range(axes.shape[1]):
axes_list.append(axes[i, j])
print(axes_list)
fig, axes = plt.subplots(3, 3)
axes_list = []
for i in range(axes.shape[0]):
for j in range(axes.shape[1]):
axes_list.append(axes[i, j])
for ax in axes_list:
ax.plot([1, 2, 3])
当然大家也可以自行修改具体的绘图语句,来达到自己的目的。这里仅提供一个思路。
|