2012-08-22 157 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

對不起 - 我已經添加了一個例子,這是更有幫助嗎?告訴我,如果沒有,我會進一步詳細。 –