我有一组值,我想在 matplotlib 中使用 pcolor 绘制这些值。我正在使用颜色图“YlOrRd”,它工作正常 - 但我想将颜色图用于除零以外的所有值。也就是说,所有不为 0 的值都应使用颜色图 - 我希望 0 为黑色。
目前我正在使用我的 numpy 值数组“x”。
pcolor(x,cmap=cm.YlOrRd)
有没有办法任意修复数组 x 中从 0 到黑色的所有值?
谢谢,戴夫。
我有一组值,我想在 matplotlib 中使用 pcolor 绘制这些值。我正在使用颜色图“YlOrRd”,它工作正常 - 但我想将颜色图用于除零以外的所有值。也就是说,所有不为 0 的值都应使用颜色图 - 我希望 0 为黑色。
目前我正在使用我的 numpy 值数组“x”。
pcolor(x,cmap=cm.YlOrRd)
有没有办法任意修复数组 x 中从 0 到黑色的所有值?
谢谢,戴夫。
这里有两种方法。一种是创建您自己的colormap
,另一种是使用masked array
. 假设我们有:
import matplotlib
from pylab import *
data = np.arange(-50, 50).reshape(10, 10)
data = np.abs(data)
pcolor(data, cmap=cm.YlOrRd)
show()
这将产生:
现在我们做同样的事情,但是创建一个名为的列表colors
,它具有与 相同的值cm.YlOrRd
,除了0
我们设置为黑色(0,0,0
在 rgb 中)的条目。然后我们LinearSegmentedColormap.from_list
用来实际制作颜色图:
import matplotlib
from pylab import *
data = np.arange(-50, 50).reshape(10, 10)
data = np.abs(data)
colors = [(0,0,0)] + [(cm.YlOrRd(i)) for i in xrange(1,256)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)
pcolor(data, cmap=new_map)
savefig('map.png')
show()
这会产生相同的图,但零值是黑色的:
这是使用掩码数组的另一种方法,它涉及更多,代码中的注释解释了这些步骤:
from pylab import *
import numpy.ma as ma
data=np.arange(-50,50).reshape(10,10)
data=np.abs(data)
#create a mask where only values=0 are true:
mask = data == 0
#create a masked array by combining our mask and data:
mx = ma.masked_array(data, mask)
#set masked values in cm.YlOrRd to 'black'
cm.YlOrRd.set_bad(color='black', alpha=None)
# pcolor(data,cmap=cm.YlOrRd)
#we must use pcolormesh instead of pcolor, as pcolor does not draw masked values at all
pcolormesh(mx,cmap=cm.YlOrRd)
show()
这会产生与上面相同的图。
这些方法之间存在潜在差异,第一种方法将舍入数据值并应用适当的颜色,而第二种方法只会将等于 0 的值设置为黑色(即不会屏蔽 0.001,因此将是适当的)cm.YlOrRd
颜色)。第二个的主要优点是您可以完全任意屏蔽条目。