2016-08-21 82 views
0

我正在修改我在seaborn文檔中找到的一段代碼,以設計matplotlib和seaborn常用的調色板。下面的代碼工作得很好,但是,如果你繪製了許多點(在我的例子中爲5000),則較暗的顏色在圖表中占主導地位。 快速解決此問題是將一個(或兩個)顏色的Alpha值設置爲低。在seaborn中設置自定義調色板的Alpha值

custom = ["#D1EC9C", "#F1EBF4"] 
sns.set_palette(custom) 
# construct cmap 
my_cmap = ListedColormap(custom) 

N = 5000 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

有誰知道如何設置自定義Seaborn調色板的Alpha值嗎? enter image description here 感謝

+1

爲什麼要在調色板中設置alpha而不是將它設置在散點圖本身上(通過將'alpha = 0.5'傳遞給scatter調用)? – BrenBarn

+0

分散調用中的alpha更改了兩者的alpha。我需要爲我的一個變量降低α。 –

+0

爲什麼?如果其中一種顏色是不透明的,如果它隱藏在後面,您仍然不會看到任何其他顏色。 – BrenBarn

回答

3

您可以設置alpha爲你的顏色表顏色的一部分:

custom = [(0xD1/0xFF, 0xEC/0xFF, 0x9C/0xFF, 1), (0xF1/0xFF, 0xEB/0xFF, 0xF4/0xFF, 0.5)] 
my_cmap = mpl.colors.ListedColormap(custom) 

下面筆者就給0.5秒彩色字母;如果你願意,你可以用其他顏色來做。

請注意,seaborn並沒有真正參與到這裏。情節的顏色由您在顏色映射中傳遞的顏色決定; seaborn的調色板沒有影響。在你的情節中,seaborn的唯一作用是格式化背景,座標軸,網格等。

正如我在評論中所說的,我相信只使用一種顏色的alpha將不會讓你的情節看起來像好。如果一種顏色仍然不透明,它仍然會掩蓋另一種顏色的點,只會更多(因爲現在其他顏色會變得更暗淡)。另外,如果你打算使用alpha(也許即使你不是),你選擇的淺灰色可能不是一個好主意,因爲它與seaborn提供的灰色背景相似,因此很難區分灰色從灰色背景的點。