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])

在这里插入图片描述
当然大家也可以自行修改具体的绘图语句,来达到自己的目的。这里仅提供一个思路。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐