2013-04-22 146 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