Python 3.x 在numpy&;中绘制RGB矩阵;matplotlib

Python 3.x 在numpy&;中绘制RGB矩阵;matplotlib,python-3.x,numpy,matplotlib,rgb,Python 3.x,Numpy,Matplotlib,Rgb,我正在尝试绘制一个numpy数组,其中shape[height x width x 3]包含RGB值。举个简单的例子,假设您有比利时国旗: import numpy as np import matplotlib.pyplot as plt flag = np.empty((1,3,3)) flag[0,0,:] = (0,0,0) flag[0,1,:] = (254,240,71) flag[0,2,:] = (255,55,14) plt.imshow(flag) plt.show()

我正在尝试绘制一个numpy数组,其中shape[height x width x 3]包含RGB值。举个简单的例子,假设您有比利时国旗:

import numpy as np
import matplotlib.pyplot as plt

flag = np.empty((1,3,3))
flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254,240,71)
flag[0,2,:] = (255,55,14)
plt.imshow(flag)
plt.show()
这将产生以下输出:


有人能告诉我为什么没有绘制正确的RGB值吗?我在维度上犯了错误吗?这可能是一个简单的答案,但似乎找不到。。谢谢你的建议

numpy.empty
创建的数组的默认数据类型为浮点,并且
imshow
对浮点值的处理方式不同于整数值。(
imshow
要求浮点值在0.0到1.0之间。)

改变这个

flag = np.empty((1,3,3))


flag
为浮点时,您获得这些特定颜色的原因是
imshow
显然将数组转换为整数,而没有检查输入值是否在0.0到1.0之间。在这种情况下会发生以下情况:

In [25]: flag
Out[25]: 
array([[[   0.,    0.,    0.],
        [ 254.,  240.,   71.],
        [ 255.,   55.,   14.]]])

In [26]: img = (flag*255).astype(np.uint8)

In [27]: img
Out[27]: 
array([[[  0,   0,   0],
        [  2,  16, 185],
        [  1, 201, 242]]], dtype=uint8)

如果然后运行
imshow(img)
,将得到黑色、蓝色和青色的绘图。

尝试使用介于0到1之间的浮点值。 所以像这样修改代码

flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254/255,240/255,71/255)
flag[0,2,:] = (255/255,55/255,14/255)

要在
imshow
中使用整数值,请通过
plt.imshow(flag.astype(np.uint8))
将数组转换为无符号整数。
flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254/255,240/255,71/255)
flag[0,2,:] = (255/255,55/255,14/255)