我尝试将numpy数组可视化为图像。 但是数组包含超出界限的负值或值。
我已成功获得图像,但我对灰度有一些疑问。
它是如何通过色彩图解释的? (原则上,如果数组是一个缩放到0..1的浮点数组,它应该被解释为灰度图像) 那么,原则是什么?
非常感谢您的合作。
V = np.loadtxt('np.txt')
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.matshow(V, cmap = matplotlib.cm.binary)
plt.show()
The np array like:
[ [....]
....
[ 7.47859700e-03 -4.42994573e-03 -3.15871151e-02 4.57486308e-02
4.58066400e-02 7.81800849e-02 1.41268438e-01 2.67617603e-01
3.98583385e-01 3.85877649e-01 1.92501545e-01 2.65159152e-01
2.10979793e-01 2.48940247e-01 1.75112904e-01 -3.06361785e-02
2.74774650e-01 1.81465161e-01 4.23131349e-03 -3.56762525e-02
-1.72089055e-02 -4.25273422e-02 -2.63428158e-02 -4.59487077e-02
-2.30976482e-02 -4.45129524e-02 8.95580352e-03 1.56548770e-03]
...
[...] ]
答案 0 :(得分:1)
可以使用vmin
和vmax
设置值范围,并相应地缩放色彩映射。这是在matplotlib.colors.Normalize
类中执行的,在创建像ScalarMappable
这样的颜色图时,在幕后传递给matshow
mixin。色彩映射的值将通过(V-vmin)/(vmax-vmin)
之类的标准化数据获得,然后映射到rgb或其他任何值。用于从matplotlib.colors.Normalize
执行此操作的实际代码是
# ma division is very slow; we can take a shortcut
resdat = result.data
resdat -= vmin
resdat /= (vmax - vmin)
如果您未指定vmin
或vmax
,则会自动从数据vmin=V.min()
和vmax = V.max()
的最小值和最大值中获取这些值。作为设置这些限制的最小示例,
import numpy as np
import matplotlib.pyplot as plt
#V = np.loadtxt('np.txt')
#Generate random data with negative values
V = np.random.randn(100,100) - 1.
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
im = ax.matshow(V, cmap = plt.cm.binary, vmin = -3., vmax=3.)
plt.colorbar(im)
plt.show()
这里我是ScalarMappable
。