seaborn中的色板02详解
建立配色方案
最重要的用于建立獨立配色方案的函數是color_palette()這個函數提供了許多(not all)在seaborn中生成顏色的方式。它在任意擁有palette參數的函數內部被使用(在某些需要多種顏色的情況下也可以轉入color參數)。
color_palette()可以接受任意的seaborn調色板和matplotlib colormap(除了jet,當然你也不該用這玩意~)。它也可以接收一系列在任意有效的matplotlib格式(RGB tuples, hex color codes, or HTML color names)下設置好的顏色。它的返回值通常是一個RGB元組的list。?
最后,無參數調用color_palette()會返回默認的顏色集。?
相對應地,set_palette函數可以接受同樣的參數,可以為所有圖片設置顏色。你依舊可以在with語句下調用color_palette()來暫時修改默認調色板。(見下文)
一般而言,離開數據的具體特征講著色都是耍流氓。所以我們分三種不同類型的調色板:分類色板、連續變化(顏色漸變)色板和發散(極端值深,中間值淺)色板,來講解color_palette()和其他Seaborn 調色板函數。
分類色板
????分類(定類)色板是你在區分無特定順序的離散數據時的最佳選擇。
????當你導入Seaborn庫時,默認的顏色循環被改成一組六個顏色。這會讓你想起matplotlib的顏色循環,當然咱這個漂亮多了。
????默認的顏色主題有6種不同的風格,?
????????deep, muted, pastel, bright, dark和colorblind。
使用圓形顏色系統
????當你有6種以上顏色需要區分的時候,最簡單的方式是在一個圓形的顏色空間內劃出均勻間隔的顏色。(這樣的色調變化會保證亮度和飽和度不變)。這是seaborn函數中大多數的默認方式。
最為常見的方式是采用hls顏色空間,這是一個RGB值的簡單轉換。
sns.palplot(sns.color_palette("hls", 8))#palplot是創建調色板 color_palette(顏色空間,設置幾種顏色塊) plt.show()
### 調色板 ###
* 顏色很重要
* color_palette()能傳入任何Matplotlib所支持的顏色
* color_palette()不寫參數則默認顏色
* set_palette()設置所有圖的顏色
data = np.random.normal(size=(20, 8)) + np.arange(8) / 2 sns.boxplot(data=data,palette=sns.color_palette("hls", 8)) plt.show()hls_palette()函數來控制顏色的亮度和飽和
- l-亮度 lightness
- s-飽和 saturation
使用分類Color Brewer 調色板
另一個非常漂亮的分類色板來源于Color Brewer(同樣也具有連續色板和發散色板),它也同樣存在于matplotlib colormaps中,但是并沒有得到很好的處理。在Seaborn中,當你調用Color Brewer分類色板時,你總能得到離散的顏色,但是這意味著它們在某一點開始了循環。
非常棒的一點是,Color Brewer網站提供關于調色板的色盲安全指導。避開紅綠吧
sns.palplot(sns.color_palette("Paired",8)) #兩種分割的漸變 plt.show() sns.palplot(sns.color_palette("Set2", 10))
- 1
為了幫助你從Color Brewer library中選擇調色板,我設計了choose_colorbrewer_palette。這個函數只能在IPython notebook中調用,其犯規一個交互式小部件,允許你瀏覽不同的選項及修改參數。
當然,你可能希望采用某一組你偏愛的顏色,因為color_palette接受顏色列表,這種訴求很容易實現。
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] sns.palplot(sns.color_palette(flatui))- 1
- 2
使用xkcd顏色來命名顏色
xkcd包含了一套眾包努力的針對隨機RGB色的命名。產生了954個可以隨時通過xdcd_rgb字典中調用的命名顏色
plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=1) plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3) plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3)除了通過字典的方式調用單個顏色,你可以通過向xkcd_palette()函數傳入列表來獲取成組的顏色。
colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] sns.palplot(sns.xkcd_palette(colors))連續色板
調色板中的第二大類被稱為“連續(sequential)”色板。當數據從低值(不感興趣)到高值(感興趣)分布時采用這種色板非常合適。雖然有時你需要一個連續的離散顏色調色板(discrete colors in a sequential palette),這在使用kdplot()或corrplot函數時比較常見。
在這種情況下使用jet色彩映射(jet colormaps )或者彩虹調色板( rainbow palettes)最為常見,因為顏色的范圍擁有提供數據額外信息的印象。但是過大的色調變化會帶來數據本身不連續的錯覺,并且視覺系統不能自然的通過“彩虹色”定量產生“高”、“低”之分。所以如此著色的可視化帶來的更多是謎題,其隱藏了數據的特征而非揭露它們。實際上jet palette是非常糟糕的(particularly bad)因為黃色 青色這兩種最明亮的顏色,被用于處于中間位置的數據。這過分強調了一些沒有意義的中間數據而忽略了極值。
對于順序數據最好應用那些在色調上只有細微變化,同時在飽和度和對比度上有很大變化的調色板。這種處理會吸引人們去關注數據中重要的部分。
Color Brewer library 中有許多如此的調色板,他們以調色板中的主顏色命名。
色彩隨數據變換,比如數據越來越重要則顏色越來越深
如果想要翻轉漸變,可以在面板名稱中添加一個_r后綴
sns.palplot(sns.color_palette("BuGn_r"))在Seaborn中你可以對這些色板進行“暗處理”減少他們的亮度。如果你后續需要畫線,這可以提供一些幫助。畢竟太過明亮可能導致線無法被看清。通過加入_d后綴達到
牢記,你可能想使用choose_colorbrewer_palette()函數取繪制各種不同的選項。如果你想返回一個變量當做顏色映射傳入seaborn或matplotlib的函數中,可以設置as_cmap參數為True。
連續cubehelix調色板
cubehelix調色板系統中含有亮度線性變化同時色調變化的線性色板。這意味著在打印(黑白)時或被色盲使用時,你的著色仍然能產生一定的效果。
cubehelix_palette()? ?色調線性變換
sns.palplot(sns.color_palette("cubehelix", 8))seaborn為cubehelix系統添加一個接口使得其可以在各種變化中都保持良好的亮度線性梯度。?
cubehelix_palette()函數返回的默認色板與matplotlib默認有很大區別。它不會在色輪周圍輻射太遠,也不會覆蓋過大的范圍。它也調整了顏色的順序,使得更重要的數據顏色更深。
sns.palplot(sns.cubehelix_palette(8))cubehelix_palette()函數的其他參數主要是是控制色板的具體顏色。有兩個主要的參數start和rot,還有rot的次數。
sns.palplot(sns.cubehelix_palette(8, start=.75, rot=-.150))
light_palette() 和dark_palette()調用定制連續調色板
sns.palplot(sns.light_palette("green"))
但是你可以運用as_cmap=True,將其傳入matplotlib中。
默認情況下,任何有效的matplotlib顏色可以傳遞給input參數。也可以在hls或husl空間中提供默認的rgb元組,您還可以使用任何有效的xkcd顏色的種子。
sns.palplot(sns.light_palette((210, 90, 60), input="husl"))- 1
- 1
需要注意的是,為默認的input空間提供交互的組件是husl,這與函數自身默認的并不同,但這在背景下卻是更有用的。
離散色板
調色板中的第三類被稱為“離散”。當你關注極端值時,應該采用這種著色方式。例如,如果你正在繪制溫度變化從基線值,最好使用不同色圖顯示相對降低和相對增加面積的地區。?
選擇離散色板的規則類似于順序色板,除了你想滿足一個強調的顏色中點以及用不同起始顏色的兩個相對微妙的變化。同樣重要的是,起始值的亮度和飽和度是相同的。
同樣重要的是要強調,應該避免使用紅色和綠色,因為大量的潛在觀眾將無法分辨它們。
你不應該感到驚訝的是,Color Brewer顏色字典里擁有一套精心挑選的離散顏色映射:
sns.palplot(sns.color_palette("BrBG", 7))- 1
- 1
?
另一個在matplotlib中建立的明智的選擇是coolwarm面板。請注意,這個顏色映射在中間值和極端之間并沒有太大的對比.
- 1
定制diverging palettes
你可以運用diverging_palette()去創建一個定制的diverging色板。(當然也有一個類似配套的互動工具:choose_diverging_palette())。該函數使用husl顏色系統的離散色板。你需隨意傳遞兩種顏色,并設定明度和飽和度的端點。函數將使用husl的端點值及由此產生的中間值進行均衡。
sns.palplot(sns.diverging_palette(220, 20, n=7))- 1
- 1
?
sep參數控制面板中間區域的兩個漸變的寬度。
- 1
也可以用中間的色調來選擇調色,而不是用亮度
sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))- 1
設定默認色板
color_palette函數同樣擁有set_palette()函數。兩者之間的關系與之前相同。接受的參數也相同。但是set函數可以改變matplotlib的默認色板,作用于所有畫圖。
def sinplot(flip=1):x = np.linspace(0, 14, 100)for i in range(1, 7):plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)- 1
- 2
- 3
- 4
- 1
- 2
color_palette函數同樣可以應用于with語句中,暫時性改變色板。
with sns.color_palette("PuBuGn_d"):sinplot()- 1
- 2
總結
以上是生活随笔為你收集整理的seaborn中的色板02详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware-vMotion简介和要求
- 下一篇: 浮动之京东登录页面