【问题标题】:How to plot a 2*2 grid of images using pyplot?如何使用 pyplot 绘制 2*2 的图像网格?
【发布时间】:2017-10-22 13:08:28
【问题描述】:

我想生成 cifar-10 数据集图像的网格样式图。我的代码:

#load the data
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
for i in range(0, 8):
    pyplot.subplot(440 + 1 + (i))
    pyplot.imshow(toimage(X_train[i]))
pyplot.show()

它适用于所有大小为 3*3 及以上的网格,但如果我将 440 替换为 220110,则会引发以下错误:

文件“main.py”,第 24 行,在 pyplot.subplot(220 + 1 + (i)) 文件“/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/matplotlib/pyplot.py”, 第 1044 行,在子图中 a = fig.add_subplot(*args, **kwargs) 文件“/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/matplotlib/figure.py”, 第 1020 行,在 add_subplot a = subplot_class_factory(projection_class)(self, *args, **kwargs) 文件 “/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/matplotlib/axes/_subplots.py”, 第 64 行,在 init 中 maxn=rows*cols, num=num)) ValueError: num must be 1

我阅读了有关此主题的先前答案,但不知何故,无法弄清楚。可能的原因是什么?以及如何绘制 2*2 的图像网格?

【问题讨论】:

  • 如果您查看错误ValueError: num must be 1 <= num <= 4, not 5,显然您的代码试图绘制第五个子图。一般来说,如果您发布非工作代码,它会更有用。

标签: python python-3.x matplotlib plot


【解决方案1】:

pyplot.subplot(nmk) 的语法意味着您有一个n*m 子图的nxm 网格,并选择其中的kth 子图。这意味着k 不能大于n*m

这是为 441 + k 提供的,k 介于 07 之间,因为 4*4 = 16。但是,221 不再适用。 您可以为2x2 网格选择的最高k4,因此您的循环需要:

for i in range(0, 4):
    pyplot.subplot(221 + (i))

1x1 网格没有多个图,因此使用循环没有意义,唯一可能的图是 pyplot.subplot(111)

【讨论】:

  • fig, ax_arr = plt.subplots(2, 2) 在这里可能是一个更好的选择,'specify-axes-via-3-digit-number' 是一个继承自 matlab 的 API,我们希望不再强调
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2011-08-05
  • 2014-10-09
  • 2022-06-25
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多