我基本上想要绘制50种灰色阴影......与书无关! ;)
据我了解RGB值,如果所有三个值都相同(或接近它),我们会得到一个灰色阴影。例如。 (1,1,1)几乎是黑色,(254,254,254)几乎是白色。结论:我不需要一个3d数组来绘制灰色阴影。
如上所述,我使用3d数组进行了工作,但如果可能,我想使用simle 2d数组绘制它们。
这里我们使用3d数组得到正确的结果:
fig, axs = plt.subplots(10, 5, figsize=(20, 10))
fig.tight_layout(pad=0.5)
for i, ax in enumerate(axs.flat):
shade = i * 255/49
im = np.ones((4, 20, 3), dtype=np.uint8) * int(shade) # using 3d array
ax.imshow(im)
ax.tick_params(axis='both', bottom=False, left=False, labelbottom=False, labelleft=False)
ax.set_title('shade: {}'.format(shade))
这里只使用相同值的2d数组(结合cmap='gray'
参数),我们得到所有黑色输出:
fig, axs = plt.subplots(10, 5, figsize=(20, 10))
fig.tight_layout(pad=0.5)
for i, ax in enumerate(axs.flat):
shade = i * 255/49
im = np.ones((4, 20), dtype=np.uint8) * int(shade) # using 2d array
ax.imshow(im, cmap='gray')
ax.tick_params(axis='both', bottom=False, left=False, labelbottom=False, labelleft=False)
ax.set_title('shade: {}'.format(shade))
答案 0 :(得分:1)
这是因为imshow
默认情况下会对您的cmap
进行规范化,以使数据中的最低值映射为黑色,最高值为白色。由于您只有一个值,因此所有值都被解释为最低值。
要解决此问题,您需要告诉imshow
您的数据的最小和最大可能值是什么,因为这些值并非始终存在于您的图像中。这是使用vmin
和vmax
参数完成的:
ax.imshow(im, cmap='gray', vmin=0, vmax=255)