如何使用pyplot绘制2 * 2网格图像?

时间:2017-05-22 18:59:01

标签: python python-3.x matplotlib plot

我想生成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行,in       pyplot.subplot(220 + 1 +(i))文件“/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/matplotlib/pyplot.py”,   第1044行,在子图中       a = fig.add_subplot(* args,** kwargs)File“/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必须为1< = num< = 4,而不是5

我在这个主题上阅读了以前的答案,但不知怎的,无法弄明白。可能的原因是什么?如何绘制2 * 2网格图像?

1 个答案:

答案 0 :(得分:3)

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

这是441 + k给出的k074*4 = 16221。但是,k不再适用。 您可以为2 x 2网格选择的最高4for i in range(0, 4): pyplot.subplot(221 + (i)) ,因此您的循环必须为:

1

1 x pyplot.subplot(111)网格没有多个绘图,因此使用循环没有意义,唯一可能的绘图是if thing.lower() == "o": thing = "x" else: thing = "o"