這裏有兩種方法可以做到這一點。一個是通過創建自己的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
in 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
顏色)。第二個的主要優點是你可以完全隨意地屏蔽掉條目。