2012-08-22 199 views
0

我有一个二维数组,我正在用imshow进行绘图,并且我想根据数组中每个像素的值使用costums颜色。我会用一个例子来解释它。自定义matplotlib中的颜色条

from pylab import * 
from numpy import * 

img = ones((5,5)) 
img[1][1] = 2 

imshow(img,interpolation='nearest');colorbar() 

如果您运行此代码,您会看到蓝色背景中的红色正方形。红色正方形对应于img中的像素[1][1],而另一个像素则因为它们的值为1而呈蓝色。如果我想让红色正方形用自定义颜色着色,该怎么办? 或者更一般地说,如果我在示例中有像img这样的二维数组,我怎样才能用具有相同颜色的像素着色像素,我可以选择。

我已经找到了这个网页,说明如何生成自定义颜色条,但是这不是有用:http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps

回答

3

链接你送有以下几点:

但是,如果我认为那些颜色表是丑陋?那么,只需使用matplotlib.colors.LinearSegmentedColormap让你的 自己。首先,创建一个 脚本,该脚本将范围(0,1)映射到RGB光谱中的值。在 这个字典中,你将有一系列元素为每个颜色 “红色”,“绿色”和“蓝色”。这些颜色 系列中的每一个中的第一个元素需要从0到1进行排序,其间的任意间距为 。现在,请考虑下面的'红色'系列中的(0.5,1.0,0.7)。 这个元组说,在(0,1)范围内的0.5处,从下面的 内插到1.0,以及从0.7以上的内插。通常,每个 元组中的后两个值将相同,但使用不同值有助于 在您的色彩映射中进行中断。这可能比 声音更容易理解,这表现在这个简单的脚本:

1 from pylab import * 
    2 cdict = {'red': ((0.0, 0.0, 0.0), 
    3     (0.5, 1.0, 0.7), 
    4     (1.0, 1.0, 1.0)), 
    5   'green': ((0.0, 0.0, 0.0), 
    6     (0.5, 1.0, 0.0), 
    7     (1.0, 1.0, 1.0)), 
    8   'blue': ((0.0, 0.0, 0.0), 
    9     (0.5, 1.0, 0.0), 
    10     (1.0, 0.5, 1.0))} 
    11 my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256) 
    12 pcolor(rand(10,10),cmap=my_cmap) 
    13 colorbar() 

这不正是你想要的?

这里有一个如何与您提供的图片做一个例子:

import matplotlib 
from matplotlib import pyplot as plt 
from pylab import * 

img = ones((5,5)) 
img[1][1] = 2 

cdict = {'red': ((0.0, 0.0, 0.0), 
       (0.5, 1.0, 0.7), 
        (1.0, 1.0, 1.0)), 
      'green': ((0.0, 0.0, 0.0), 
         (0.5, 1.0, 0.0), 
         (1.0, 1.0, 1.0)), 
      'blue': ((0.0, 0.0, 0.0), 
         (0.5, 1.0, 0.0), 
        (1.0, 0.5, 1.0))} 

my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256) 
plt.pcolor(img,cmap=my_cmap) 
plt.colorbar() 
plt.show() 

另外,如果你真的想为你链接到例如规定了一些映射到你可以使用discrete_cmap颜色,这里是scipy文档提供的示例方法:

def discrete_cmap(N=8): 
    """create a colormap with N (N<15) discrete colors and register it""" 
    # define individual colors as hex values 
    cpool = [ '#bd2309', '#bbb12d', '#1480fa', '#14fa2f', '#000000', 
       '#faf214', '#2edfea', '#ea2ec4', '#ea2e40', '#cdcdcd', 
       '#577a4d', '#2e46c0', '#f59422', '#219774', '#8086d9' ] 
    cmap3 = col.ListedColormap(cpool[0:N], 'indexed') 
    cm.register_cmap(cmap=cmap3) 
+0

我不明白如何使用此信息来执行我所需的操作。 – Brian

+0

对不起 - 我已经添加了一个例子,这是更有帮助吗?告诉我,如果没有,我会进一步详细。 –