文章原創(chuàng),最近更新:2018-05-10
1.Seaborn調(diào)色板的介紹
2.調(diào)色板相關(guān)的函數(shù)
3.分類色板
4.圓形畫板
課程來源: python數(shù)據(jù)分析與機器學(xué)習(xí)實戰(zhàn)-唐宇迪
學(xué)習(xí)參考鏈接:
1、Seaborn(sns)官方文檔學(xué)習(xí)筆記(第二章 斑駁陸離的調(diào)色板)
2、Seaborn官方0.8.1版本
1.Seaborn調(diào)色板的介紹
在畫圖當(dāng)中有個非常重要的模塊就是顏色,在數(shù)據(jù)圖表的繪制當(dāng)中起著舉足輕重的作用.一個圖畫的好不好看,很大程度上是由顏色的取色漂不漂亮決定的.這個顏色分成兩種,一種是離散型的,一種是連續(xù)型的.
離散型的比如統(tǒng)計4個運動員,跑步的分布情況.四個運動員可以用不同的顏色進行區(qū)分,這就是離散型.就是多個種類用折線圖進行統(tǒng)計,這也是離散型.
連續(xù)型的比如統(tǒng)計一個運動員一天的情況,一天當(dāng)中,有些情況是比較重要的,有些情況是不重要的,在數(shù)據(jù)當(dāng)中,可以用一條線畫出一條漸變色.漸變色可以用一條數(shù)據(jù)由重要到不重要或由不重要到重要的一個變化程度.
2.調(diào)色板相關(guān)的函數(shù):
1)color_palette()能傳入任何Matplotlib所支持的顏色
最重要的直接設(shè)置調(diào)色板的函數(shù),不寫參數(shù)則默認(rèn)顏色
- color_palette()返回定義調(diào)色板的顏色列表
seaborn.color_palette(palette=None, n_colors=None, desat=None)可用的seaborn調(diào)色板名稱:deep(默認(rèn)顏色), muted, pastel, bright, dark, 和 colorblind
其他選項:hls,husl,任何命名的matplotlib調(diào)色板,顏色列表
調(diào)用此函數(shù)palette=None將返回當(dāng)前matplotlib顏色循環(huán)。
-
相關(guān)參數(shù)
- palette:調(diào)色板名稱或None(無返回當(dāng)前調(diào)色板)。
- n_colors:int,可選,調(diào)色板中的顏色數(shù)量
- desat:浮點型,可選,按比例去飽和每種顏色
返回的值:palette(調(diào)色板):RGB元組列表
2)palplot()
模塊seaborn.miscplot中的函數(shù)palplot, 將調(diào)色板中的值繪制為水平數(shù)組,palplot(pal,size = 1)
- pal:matplotlib顏色的序列.顏色,即由seaborn.color_palette()返回的顏色
- size:繪制水平數(shù)組的大小
3)set_palette()設(shè)置所有圖的顏色
set_palette(palette, n_colors=None, desat=None, color_codes=False)設(shè)置所有圖的默認(rèn)顏色循環(huán)。
palette:hls | husl | matplotlib色彩表| seaborn調(diào)色板.
調(diào)色板定義。應(yīng)該是color_palette() 可以處理的東西。n_colors:int,循環(huán)中的顏色數(shù)量。默認(rèn)顏色數(shù)量取決于格式palette
desat:浮點型,按比例對每種顏色去飽和。
color_codes:布爾,如果True并且palette是一個seaborn調(diào)色板,請將簡寫顏色代碼(例如“b”,“g”,“r”等)重新映射到此調(diào)色板的顏色。
對應(yīng)的函數(shù)set_palette()接受相同的參數(shù),并為所有圖設(shè)置默認(rèn)的顏色循環(huán)。你也可以在with塊中使用color_palette()來實現(xiàn)臨時的更改調(diào)色板配置。
3.分類色板
分類色板(定性)是在區(qū)分沒有固定順序的數(shù)據(jù)時最好的選擇。
Seaborn對顏色提供了非常多的選擇方式,默認(rèn)的顏色循環(huán)被更改為一組六種顏色。雖然這些顏色可能會讓你想起matplotlib的標(biāo)準(zhǔn)顏色循環(huán),但他們無疑更賞心悅目一些。
默認(rèn)顏色主題共有六種不同的變化分別是:deep, muted, pastel, bright, dark, 和 colorblind。
類似下面的方式直接傳入即可。
current_palette = sns.color_palette("dark") # 直接傳入對應(yīng)的參數(shù)即可變化
sns.palplot(current_palette)
六種不同的主題變化,是如何的呢?
- deep,默認(rèn)顏色,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette()
#等價current_palette=sns.color_palette("deep")
sns.palplot(current_palette)
輸出的結(jié)果如下:

比如上節(jié)課畫的箱線圖,在沒有設(shè)置顏色的情況下,繪制的圖形就是默認(rèn)的顏色.

- muted,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("muted")
sns.palplot(current_palette)
輸出的結(jié)果如下:

- pastel,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("pastel")
sns.palplot(current_palette)
輸出的結(jié)果如下:

- bright,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("bright")
sns.palplot(current_palette)
輸出的結(jié)果如下:

- dark,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("dark")
sns.palplot(current_palette)
輸出的結(jié)果如下:

- colorblind,完整的代碼如下:
import seaborn as sns
current_palette=sns.color_palette("colorblind")
sns.palplot(current_palette)
輸出的結(jié)果如下:

4.圓形畫板
當(dāng)你有六個以上的分類要區(qū)分時,最簡單的方法就是在一個圓形的顏色空間中畫出均勻間隔的顏色(這樣的色調(diào)會保持亮度和飽和度不變)。這是大多數(shù)的當(dāng)他們需要使用比當(dāng)前默認(rèn)顏色循環(huán)中設(shè)置的顏色更多時的默認(rèn)方案。
比如:系統(tǒng)默認(rèn)了6個顏色的主題,比如我要畫8個運動員的運動情況,是不是應(yīng)該有8個顏色呢?那么顏色多于6個的時候,就需要用到畫板了。
顏色涉及到兩個指標(biāo),一個是飽和度一個是亮度。一般都是使用默認(rèn)的飽和度和亮點,很少情況需要定義飽和度和亮度。
4.1使用hls的顏色空間
設(shè)置更多的顏色最常用的方法是使用hls的顏色空間,這是RGB值的一個簡單轉(zhuǎn)換。
比如hls的顏色空間,平均分為12等分,使用代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",12))
輸出的結(jié)果如下:

比如hls的顏色空間,平均分為8等分,使用代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",8))
輸出的結(jié)果如下:

這里的數(shù)量是根據(jù)種類而決定的,假設(shè)有8個運動員就寫8,12個運動員就寫12.這種方法比自己自定義顏色容易了很多.如果使用顏色的時候,沒有特殊的需求,就按此方法進行.
我們把顏色寫出來了,那應(yīng)該怎么用呢?怎么把這定義好的顏色放到數(shù)據(jù)中呢?
根據(jù)以上調(diào)配的顏色,依據(jù)sns.boxplot中的參數(shù)palette,將顏色傳進來,對以下的箱線圖的圖進行調(diào)色,具體代碼如下:
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))
輸出的結(jié)果如下:

根據(jù)輸出的結(jié)果發(fā)現(xiàn),繪制的圖形與調(diào)配的8個顏色是一一對應(yīng)的.
總結(jié):
- 先制定好color_palette.
- 根據(jù)實際的種類,選好傳進來多少種顏色,這樣就會按照順序,將不同類別的將指定好的顏色一一傳進來.
- 這是分類畫板最基本的使用方法.
這里涉及到的知識點:
1)boxplot(),相關(guān)參數(shù)如下:
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)
- 從以上參數(shù)可以看出,有個參數(shù)palette.
- palette參數(shù)的可選項是調(diào)色板名稱,列表或字典.
- 而sns.color_palette()函數(shù)設(shè)置或查看調(diào)色板(palette),函數(shù)返回值是rgb元組的列表。
- 因此boxplot中的palette可調(diào)用palette參數(shù).
4.2控制顏色的亮度和飽和
控制顏色的亮度和飽和,需要用到hls_palette()函數(shù),相關(guān)參數(shù)如下:
- l-亮度 lightness
- s-飽和 saturation
畫圖的時候,可以指定不同顏色的亮度和飽和度,可以給顏色帶了差異.
比如設(shè)置hls_palette()中的參數(shù)l=.3,s=.8,具體代碼如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.3,s=.8))
輸出的結(jié)果如下:

比如設(shè)置hls_palette()中的參數(shù)l=.7,s=.9,具體代碼如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.7,s=.9))
輸出的結(jié)果如下:

從以上結(jié)果都可以看出,飽和度和亮度會影響顏色,可以根據(jù)自己實際需要進行設(shè)置.
這里涉及的知識點:
1)hls_palette()
- hls_palette(n_colors = 6,h = 0.01,l = 0.6,s = 0.65)在HLS色調(diào)空間中獲得一組均勻間隔的顏色。
- h,l和s應(yīng)該在0和1之間
- n_colors:int,調(diào)色板中的顏色數(shù)量
- h(first hue) : float,第一色調(diào)
- l(lightness) : float,亮度
- s (saturation): float,飽和
- 返回: 調(diào)色板;seaborn調(diào)色板,作為RGB元組的顏色列表式對象。
4.3繪圖顏色的配對
想進行繪圖數(shù)據(jù)的對比,比如一批數(shù)據(jù),是由3個國家組成的,每個國家分別有2個運動員,想呈現(xiàn)這樣的趨勢,國家與國家的顏色要有明顯的區(qū)別,但是同一國家的兩個運動員顏色最好相近.這樣能夠把數(shù)據(jù)更加清晰的表達出來.
這里需要用到"Paired",這個調(diào)出的調(diào)色板是有明顯區(qū)別的顏色對.
代碼如下:
import seaborn as sns
sns.palplot(sns.color_palette("Paired",8))
輸出的結(jié)果如下:

共調(diào)出4對有明顯區(qū)別的顏色對.通過顏色對來表達顏色的分布.比如每隊較深的一個顏色表示一個國家.每隊的兩個深淺顏色分別表示同一國家的兩個運動員.
到底使用什么顏色的畫筆,還得看大家實際需求,如果能夠把數(shù)據(jù)描繪得更加清晰,漂亮,那就使用什么樣的顏色.