我使用值范围(0,1)的自定义3xN数据作为RGB颜色,并希望使用matplotlib.imshow()来显示它。
import pylab as plt
import numpy as np
Z = np.vstack([np.zeros((1, 256)), np.zeros((1, 256,)), np.zeros((1, 256,))])
im = plt.imshow(Z, interpolation='none', aspect='auto')
plt.colorbar(im, orientation='horizontal')
plt.show()
我希望这会给我一个黑色的图像。但我得到一个像这样的绿色:
Y-ticks看起来很有趣。我根本不理解Y轴上的-0.5刻度。为什么y轴的范围在[-0.5,2.5]?
之间答案 0 :(得分:3)
自己想出来:
这是一个简单的修复:
import pylab as plt
import numpy as np
Z = np.vstack([np.zeros((1, 256)), np.zeros((1, 256,)), np.zeros((1, 256,))]).transpose()
Z = Z[None, ...]
im = plt.imshow(Z, interpolation='none', aspect='auto')
plt.colorbar(im, orientation='horizontal')
plt.show()
答案 1 :(得分:2)
对于几年后登陆此页面的任何人,OP都知道了最初问题的原因,但更简单的解决方法是:np.dstack()
。 numpy.dstack
import numpy as np
import matplotlib.pyplot as plt
Z = np.vstack([np.zeros((1, 256)), np.zeros((1, 256,)), np.zeros((1, 256,))])
im = plt.imshow(np.dstack(Z), interpolation='none', aspect='auto')
plt.colorbar(im, orientation='horizontal')
plt.show()
答案 2 :(得分:1)
因为您基本上已向np.imshow
发送了无效图片。尝试从您的计算机打开图像并进行比较。打开图片会为您提供(dimx, dimy, color_depth)
形状,而Z
形状为(3, 256)
。要确切了解发生了什么,您应该查看imshow
来源,但我很确定他们有一些错误处理会产生结果。要创建一个图像你应该做
img = np.zeros((800, 500, 3), dtype=np.float32)
会给你一个像你想要的黑色方块。
此外,imshow显示了一个坐标系,左上角有一个(0,0
,以匹配其他人传统上显示图像坐标系的方式。