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