如何在matplotlib中绘制任意数量的子图?

4

当我想要绘制2个图表时,我通常会这样做:

f, (ax1, ax2) = plt.subplots(1, 2)

如果我有多个图像列表,并且想在每个列表上运行相同的功能,以便绘制该列表中的每个图像怎么办?每个列表具有不同数量的图像。
2个回答

4

如何处理:

num_subplots = len(listoffigs)
axs = []
for i in range(num_subplots):
    axs.append(plt.subplot(num_subplots, 1, i+1))

甚至可以更简短,使用列表推导式:

num_subplots = len(listoffigs)
axs = [plt.subplot(num_subplots, 1, i+1) for i in range(num_subplots)]

*) 编辑:添加列表推导式解决方案


列表推导式的解决方案正是我一直在寻找的,实际上比类似问题中的其他建议要快得多。 - jimh
但是如何将列表用作图形呢? - Gulzar
您可以通过它们的列表索引获取不同的子图。因此,axs [0]将引用第一个子图。 - JohanL

1

首先,拥有多个列表或一个长列表之间没有区别,因此将所有列表合并成一个。

biglist = list1 + list2 + list3

您可以通过列表长度确定所需的子图数量。在最简单的情况下,制作一个正方形网格,

n = int(np.ceil(np.sqrt(len(biglist))))
fig, axes = plt.subplots(n,n)

将您的图像填入网格中,

for i, image in enumerate(biglist):
    axes.flatten()[i].imshow(image)

对于其余的轴,关闭脊柱。
while i < n*n:
    axes.flatten()[i].axis("off")
    i += 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接