2013-04-22 258 views
3

我使用python中的顏色映射來繪製和分析矩陣中的值。我需要將白色與每個等於0.0的元素相關聯,而對於其他元素,我希望有一個「傳統」顏色地圖。看着Python Matplotlib Colormap我修改使用令pColor作爲字典:Matplotlib python更改顏色映射中的單一顏色

dic = {'red': ((0., 1, 1), 
       (0.00000000001, 0, 0), 
       (0.66, 1, 1), 
       (0.89,1, 1), 
       (1, 0.5, 0.5)), 
     'green': ((0., 1, 1), 
       (0.00000000001, 0, 0), 
       (0.375,1, 1), 
       (0.64,1, 1), 
       (0.91,0,0), 
       (1, 0, 0)), 
     'blue': ((0., 1, 1), 
       (0.00000000001, 1, 1), 
       (0.34, 1, 1), 
       (0.65,0, 0), 
       (1, 0, 0))} 

結果:enter image description here

我設置:

matrix[0][0]=0 matrix[0][1]=0.002 

但是你可以看到,他們都與白色相關顏色,即使我設置了0.00000000001作爲藍色的起點。這怎麼可能?我如何改變它以獲得我想要的?

回答

2

儘管不理想,掩蓋零值的作品。你可以用cmap.set_bad()來控制它的顯示。

from matplotlib.colors import LinearSegmentedColormap 
import matplotlib.pyplot as plt 
import numpy as np 

dic = {'red': ((0., 1, 0), 
       (0.66, 1, 1), 
       (0.89,1, 1), 
       (1, 0.5, 0.5)), 
     'green': ((0., 1, 0), 
       (0.375,1, 1), 
       (0.64,1, 1), 
       (0.91,0,0), 
       (1, 0, 0)), 
     'blue': ((0., 1, 1), 
       (0.34, 1, 1), 
       (0.65,0, 0), 
       (1, 0, 0))} 

a = np.random.rand(10,10) 
a[0,:2] = 0 
a[0,2:4] = 0.0001 

fig, ax = plt.subplots(1,1, figsize=(6,6)) 

cmap = LinearSegmentedColormap('custom_cmap', dic) 
cmap.set_bad('white') 

ax.imshow(np.ma.masked_values(a, 0), interpolation='none', cmap=cmap) 

enter image description here

+0

能告訴我到底你在哪裏設置爲「不連續」的選項?插值='無'? – 2013-04-23 12:48:36

+0

它在你的colormap dictonairy中。格式爲(x,y1,y2),請注意,對於你的y1和y2是相等的,我的變化。在這種情況下,使用我的色彩映射表示值_till_零對於rgb(如此白色)具有1的顏色,但對於紅色和綠色,值_from_零的值爲0,對於藍色(藍色)則值爲1。 請參閱: http://matplotlib.org/api/colors_api.html#matplotlib.colors.LinearSegmentedColormap – 2013-04-23 13:05:30

+0

但是,如果我像你那樣定義字典,我還需要使用:np.ma.masked_values(matrix,0)作爲imshow()的參數,否則「技巧」不起作用。 – 2013-04-23 13:28:32