2012-07-10 56 views
2

設置... 我有一組映射到二維空間上的配對值(z,w)(即f(x,y)=(z ,w))我正在製作一張圖片地圖。我這樣做的首選方法是,每個點的rgb顏色爲: (r,g,b)=(z'w',z'(1-w'),z'), z '和w'被歸一化爲0和1之間(用於顏色映射的目的)。 以這種方式,z值有效地確定點的亮度,而w值確定紅藍色調。Matplotlib:如何將兩個自定義顏色條添加到圖像映射

這是問題... 我可以製作此圖像映射,但顏色條是彩虹顏色映射(不知何故),這不是很有幫助。相反,我需要兩個獨立的自定義顏色條。我想要的是在右邊有一個垂直的彩條,它是黑白色的,並縮放到z的範圍,底部的水平彩條是藍紅色的,並縮放到w的範圍。

有誰知道如何做到這一點?

+0

還有就是我的公式中一個小錯誤,應改爲:(R,G,B )=(z'* w',0,z'*(1-w'))。 – ampron 2012-07-10 22:26:02

+0

如果我理解你的問題,那麼你正在尋找像http://matplotlib.sourceforge.net/examples/api/colorbar_only.html。否則放一些示例代碼。 – imsc 2012-07-11 20:40:39

+0

是的,回答我的問題,謝謝。我搜查了matplotlib很長一段時間的例子,我不知道我錯過了那一個。 – ampron 2012-07-11 21:56:21

回答

2

正如imsc在對我的問題的評論中指出的,答案在於他所鏈接的matplotlib example。下面是我用,下面鏈接的例子代碼,可以解決這種情況在我的問題具體是:

import matplotlib as mpl 

ax_cb1 = fig.add_axes((0.85, 0.125, 0.03, 0.75)) 
BW_cdict = { 
    'red': ((0.0, 0.0, 0.0), 
       (1.0, 1.0, 1.0)), 
    'green': ((0.0, 0.0, 0.0), 
       (1.0, 1.0, 1.0)), 
    'blue': ((0.0, 0.0, 0.0), 
       (1.0, 1.0, 1.0)) 
    } 
black_white = mpl.colors.LinearSegmentedColormap('BlackWhite', BW_cdict) 
norm = mpl.colors.Normalize(vmin=z_min, vmax=z_max) 
cb1 = mpl.colorbar.ColorbarBase(
    ax_cb1, cmap=black_white, norm=norm, orientation='vertical' 
) 

ax_cb2 = fig.add_axes((0.125, 0.95, 0.75, 0.03)) 
BR_cdict = { 
    'red': ((0.0, 0.0, 0.0), 
       (1.0, 1.0, 1.0)), 
    'green': ((0.0, 0.0, 0.0), 
       (1.0, 0.0, 0.0)), 
    'blue': ((0.0, 1.0, 1.0), 
       (1.0, 0.0, 0.0)) 
    } 
blue_red = mpl.colors.LinearSegmentedColormap('BlueRed', BR_cdict) 
norm = mpl.colors.Normalize(vmin=w_min, vmax=w_max) 
cb2 = mpl.colorbar.ColorbarBase(
    ax_cb2, cmap=blue_red, norm=norm, orientation='horizontal' 
) 
相關問題