2013-10-11 130 views
0

我正在嘗試創建一個完全自定義的圖例(即,我不想使用plt.legendplt.colorbar。基於顏色映射,我希望能夠獲得顏色在顏色表的不同點。如何在matplotlib顏色映射中間隔確定顏色

gradient2n = LinearSegmentedColormap.from_list('gradient2n', ["white", "red"]) 
breaks = [0, 0.25, 0.5, 0.75, 1.0] 
# something like this 
print plt.colors_at_breaks(gradient2n, breaks) 
["white", "light pink", "pink", "light red", "red"] #(or the hex/rgb equivalent) 
+1

任何理由要重新發明輪子? – tacaswell

回答

2

一旦你創建了一個Colormap例如,所有你需要做的就是用0和1之間的浮點值調用它,它會返回一個包含一個元組相應的RGBA值:

>>> gradient2n(0.5) 
(1.0, 0.49803921568627452, 0.49803921568627452, 1.0) 

T這裏沒有直接的方式來表示任意顏色爲「人類可讀的」名稱 - 要表示8位顏色,您需要16,777,216個不同的名稱!但是,您可以使用matplotlib.colors.rgb2hex輕鬆地將RGBA值轉換爲十六進制字符串。

所以你的整體功能可能看起來像:

from matplotlib.colors import rgb2hex 

def colors_at_breaks(cmap, breaks): 
    return [rgb2hex(cmap(bb)) for bb in breaks] 

例如:

>>> colors_at_breaks(gradient2n, breaks) 
['#ffffff', '#ffbfbf', '#ff7f7f', '#ff3f3f', '#ff0000'] 
+0

謝謝!我必須嘗試其他一切。這絕對是完美的。 – Greg