我想生成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
替换为220
或110
,则会引发以下错误:
文件“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网格图像?
答案 0 :(得分:3)
pyplot.subplot(nmk)
的语法表示您拥有n
x m
个n*m
子图的网格,并选择其中k
个子图。这意味着k
不能大于n*m
。
这是441 + k
给出的k
,0
到7
,4*4 = 16
。221
。但是,k
不再适用。
您可以为2
x 2
网格选择的最高4
为for i in range(0, 4):
pyplot.subplot(221 + (i))
,因此您的循环必须为:
1
1
x pyplot.subplot(111)
网格没有多个绘图,因此使用循环没有意义,唯一可能的绘图是if thing.lower() == "o":
thing = "x"
else:
thing = "o"
。