你如何绘制块灰色阴影?

时间:2018-03-28 13:20:03

标签: python matplotlib

我基本上想要绘制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))

enter image description here

这里只使用相同值的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))

enter image description here

如何仅使用2d数组重新创建3d阵列版本?

1 个答案:

答案 0 :(得分:1)

这是因为imshow默认情况下会对您的cmap进行规范化,以使数据中的最低值映射为黑色,最高值为白色。由于您只有一个值,因此所有值都被解释为最低值。

要解决此问题,您需要告诉imshow您的数据的最小和最大可能值是什么,因为这些值并非始终存在于您的图像中。这是使用vminvmax参数完成的:

ax.imshow(im, cmap='gray', vmin=0, vmax=255)