文章原創,最近更新:2018-05-10
1.Seaborn調色板的介紹
2.調色板相關的函數
3.分類色板
4.圓形畫板
課程來源: python數據分析與機器學習實戰-唐宇迪
學習參考鏈接:
1、Seaborn(sns)官方文檔學習筆記(第二章 斑駁陸離的調色板)
2、Seaborn官方0.8.1版本
1.Seaborn調色板的介紹
在畫圖當中有個非常重要的模塊就是顏色,在數據圖表的繪制當中起著舉足輕重的作用.一個圖畫的好不好看,很大程度上是由顏色的取色漂不漂亮決定的.這個顏色分成兩種,一種是離散型的,一種是連續型的.
離散型的比如統計4個運動員,跑步的分布情況.四個運動員可以用不同的顏色進行區分,這就是離散型.就是多個種類用折線圖進行統計,這也是離散型.
連續型的比如統計一個運動員一天的情況,一天當中,有些情況是比較重要的,有些情況是不重要的,在數據當中,可以用一條線畫出一條漸變色.漸變色可以用一條數據由重要到不重要或由不重要到重要的一個變化程度.
2.調色板相關的函數:
1)color_palette()能傳入任何Matplotlib所支持的顏色
最重要的直接設置調色板的函數,不寫參數則默認顏色
- color_palette()返回定義調色板的顏色列表
seaborn.color_palette(palette=None, n_colors=None, desat=None)可用的seaborn調色板名稱:deep(默認顏色), muted, pastel, bright, dark, 和 colorblind
其他選項:hls,husl,任何命名的matplotlib調色板,顏色列表
調用此函數palette=None將返回當前matplotlib顏色循環。
-
相關參數
- palette:調色板名稱或None(無返回當前調色板)。
- n_colors:int,可選,調色板中的顏色數量
- desat:浮點型,可選,按比例去飽和每種顏色
返回的值:palette(調色板):RGB元組列表
2)palplot()
模塊seaborn.miscplot中的函數palplot, 將調色板中的值繪制為水平數組,palplot(pal,size = 1)
- pal:matplotlib顏色的序列.顏色,即由seaborn.color_palette()返回的顏色
- size:繪制水平數組的大小
3)set_palette()設置所有圖的顏色
set_palette(palette, n_colors=None, desat=None, color_codes=False)設置所有圖的默認顏色循環。
palette:hls | husl | matplotlib色彩表| seaborn調色板.
調色板定義。應該是color_palette() 可以處理的東西。n_colors:int,循環中的顏色數量。默認顏色數量取決于格式palette
desat:浮點型,按比例對每種顏色去飽和。
color_codes:布爾,如果True并且palette是一個seaborn調色板,請將簡寫顏色代碼(例如“b”,“g”,“r”等)重新映射到此調色板的顏色。
對應的函數set_palette()接受相同的參數,并為所有圖設置默認的顏色循環。你也可以在with塊中使用color_palette()來實現臨時的更改調色板配置。
3.分類色板
分類色板(定性)是在區分沒有固定順序的數據時最好的選擇。
Seaborn對顏色提供了非常多的選擇方式,默認的顏色循環被更改為一組六種顏色。雖然這些顏色可能會讓你想起matplotlib的標準顏色循環,但他們無疑更賞心悅目一些。
默認顏色主題共有六種不同的變化分別是:deep, muted, pastel, bright, dark, 和 colorblind。
類似下面的方式直接傳入即可。
current_palette = sns.color_palette("dark") # 直接傳入對應的參數即可變化
sns.palplot(current_palette)
六種不同的主題變化,是如何的呢?
- deep,默認顏色,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette()
#等價current_palette=sns.color_palette("deep")
sns.palplot(current_palette)
輸出的結果如下:
比如上節課畫的箱線圖,在沒有設置顏色的情況下,繪制的圖形就是默認的顏色.
- muted,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("muted")
sns.palplot(current_palette)
輸出的結果如下:
- pastel,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("pastel")
sns.palplot(current_palette)
輸出的結果如下:
- bright,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("bright")
sns.palplot(current_palette)
輸出的結果如下:
- dark,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("dark")
sns.palplot(current_palette)
輸出的結果如下:
- colorblind,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("colorblind")
sns.palplot(current_palette)
輸出的結果如下:
4.圓形畫板
當你有六個以上的分類要區分時,最簡單的方法就是在一個圓形的顏色空間中畫出均勻間隔的顏色(這樣的色調會保持亮度和飽和度不變)。這是大多數的當他們需要使用比當前默認顏色循環中設置的顏色更多時的默認方案。
比如:系統默認了6個顏色的主題,比如我要畫8個運動員的運動情況,是不是應該有8個顏色呢?那么顏色多于6個的時候,就需要用到畫板了。
顏色涉及到兩個指標,一個是飽和度一個是亮度。一般都是使用默認的飽和度和亮點,很少情況需要定義飽和度和亮度。
4.1使用hls的顏色空間
設置更多的顏色最常用的方法是使用hls的顏色空間,這是RGB值的一個簡單轉換。
比如hls的顏色空間,平均分為12等分,使用代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",12))
輸出的結果如下:
比如hls的顏色空間,平均分為8等分,使用代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",8))
輸出的結果如下:
這里的數量是根據種類而決定的,假設有8個運動員就寫8,12個運動員就寫12.這種方法比自己自定義顏色容易了很多.如果使用顏色的時候,沒有特殊的需求,就按此方法進行.
我們把顏色寫出來了,那應該怎么用呢?怎么把這定義好的顏色放到數據中呢?
根據以上調配的顏色,依據sns.boxplot中的參數palette,將顏色傳進來,對以下的箱線圖的圖進行調色,具體代碼如下:
import seaborn as sns
import numpy as np
data=np.random.normal(size=(20,8))+np.arange(8)/2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))
輸出的結果如下:
根據輸出的結果發現,繪制的圖形與調配的8個顏色是一一對應的.
總結:
- 先制定好color_palette.
- 根據實際的種類,選好傳進來多少種顏色,這樣就會按照順序,將不同類別的將指定好的顏色一一傳進來.
- 這是分類畫板最基本的使用方法.
這里涉及到的知識點:
1)boxplot(),相關參數如下:
boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
- 從以上參數可以看出,有個參數palette.
- palette參數的可選項是調色板名稱,列表或字典.
- 而sns.color_palette()函數設置或查看調色板(palette),函數返回值是rgb元組的列表。
- 因此boxplot中的palette可調用palette參數.
4.2控制顏色的亮度和飽和
控制顏色的亮度和飽和,需要用到hls_palette()函數,相關參數如下:
- l-亮度 lightness
- s-飽和 saturation
畫圖的時候,可以指定不同顏色的亮度和飽和度,可以給顏色帶了差異.
比如設置hls_palette()中的參數l=.3,s=.8,具體代碼如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.3,s=.8))
輸出的結果如下:
比如設置hls_palette()中的參數l=.7,s=.9,具體代碼如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.7,s=.9))
輸出的結果如下:
從以上結果都可以看出,飽和度和亮度會影響顏色,可以根據自己實際需要進行設置.
這里涉及的知識點:
1)hls_palette()
- hls_palette(n_colors = 6,h = 0.01,l = 0.6,s = 0.65)在HLS色調空間中獲得一組均勻間隔的顏色。
- h,l和s應該在0和1之間
- n_colors:int,調色板中的顏色數量
- h(first hue) : float,第一色調
- l(lightness) : float,亮度
- s (saturation): float,飽和
- 返回: 調色板;seaborn調色板,作為RGB元組的顏色列表式對象。
4.3繪圖顏色的配對
想進行繪圖數據的對比,比如一批數據,是由3個國家組成的,每個國家分別有2個運動員,想呈現這樣的趨勢,國家與國家的顏色要有明顯的區別,但是同一國家的兩個運動員顏色最好相近.這樣能夠把數據更加清晰的表達出來.
這里需要用到"Paired",這個調出的調色板是有明顯區別的顏色對.
代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("Paired",8))
輸出的結果如下:
共調出4對有明顯區別的顏色對.通過顏色對來表達顏色的分布.比如每隊較深的一個顏色表示一個國家.每隊的兩個深淺顏色分別表示同一國家的兩個運動員.
到底使用什么顏色的畫筆,還得看大家實際需求,如果能夠把數據描繪得更加清晰,漂亮,那就使用什么樣的顏色.