Python 使用matplotlib在伪彩色打印中设置任意颜色

Python 使用matplotlib在伪彩色打印中设置任意颜色,python,matplotlib,Python,Matplotlib,可能重复: 我有一个值数组,我想在matplotlib中使用pcolor绘制这些值。我使用的是颜色映射'YlOrRd',效果很好-但我想对除零以外的所有值使用颜色映射。也就是说,所有不是0的值都应该使用颜色映射-我希望0是黑色的 目前,我使用的是数值为“x”的numpy数组 pcolor(x,cmap=cm.YlOrRd) 有没有一种方法可以任意修复数组x中0到黑色的所有值 谢谢, 戴夫。这里有两种方法。一个是通过创建自己的colormap,另一个是通过使用遮罩数组。假设我们有: impor

可能重复:

我有一个值数组,我想在matplotlib中使用pcolor绘制这些值。我使用的是颜色映射'YlOrRd',效果很好-但我想对除零以外的所有值使用颜色映射。也就是说,所有不是0的值都应该使用颜色映射-我希望0是黑色的

目前,我使用的是数值为“x”的numpy数组

pcolor(x,cmap=cm.YlOrRd)
有没有一种方法可以任意修复数组x中0到黑色的所有值

谢谢,
戴夫。

这里有两种方法。一个是通过创建自己的
colormap
,另一个是通过使用
遮罩数组
。假设我们有:

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
条目之外,该条目在rgb中设置为黑色(
0,0,0
)。然后我们使用
LinearSegmentedColormap。从_list
实际制作colormap:

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
颜色也会被屏蔽)。第二种方法的主要优点是可以完全任意地屏蔽条目