matshow:将numpy数组中的值colormap为二进制

时间:2015-09-24 03:56:01

标签: python numpy matplotlib

我尝试将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]
...
[...] ]

1 个答案:

答案 0 :(得分:1)

可以使用vminvmax设置值范围,并相应地缩放色彩映射。这是在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)

如果您未指定vminvmax,则会自动从数据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