最近在做幾個(gè)項(xiàng)目的數(shù)據(jù)分析,每次用到seaborn
進(jìn)行可視化繪圖的時(shí)候總是忘記具體操作。雖然seaborn
的官方網(wǎng)站已經(jīng)詳細(xì)的介紹了使用方法,但是畢竟是英文,而且每次都上網(wǎng)查找不是很方便,還不如自己重新來(lái)一遍。因此博主想從零開(kāi)始將seaborn
學(xué)習(xí)一遍,做一個(gè)總結(jié),也希望供大家使用參考。
Seaborn簡(jiǎn)介
seaborn
同matplotlib
一樣,也是Python進(jìn)行數(shù)據(jù)可視化分析的重要第三方包。但 seaborn 是在 matplotlib 的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,使得作圖更加容易,圖形更加漂亮。
博主并不認(rèn)為seaborn
可以替代matplotlib
。雖然 seaborn 可以滿(mǎn)足大部分情況下的數(shù)據(jù)分析需求,但是針對(duì)一些特殊情況,還是需要用到 matplotlib 的。換句話說(shuō),matplotlib 更加靈活,可定制化,而 seaborn 像是更高級(jí)的封裝,使用方便快捷。
應(yīng)該把seaborn
視為matplotlib
的補(bǔ)充,而不是替代物。
Seaborn學(xué)習(xí)內(nèi)容
seaborn
的學(xué)習(xí)內(nèi)容主要包含以下幾個(gè)部分:
風(fēng)格管理
繪圖風(fēng)格設(shè)置
顏色風(fēng)格設(shè)置
繪圖方法
數(shù)據(jù)集的分布可視化
分類(lèi)數(shù)據(jù)可視化
線性關(guān)系可視化
結(jié)構(gòu)網(wǎng)格
數(shù)據(jù)識(shí)別網(wǎng)格繪圖
本次將主要介紹風(fēng)格管理的使用。
風(fēng)格管理 - 繪圖風(fēng)格設(shè)置
除了各種繪圖方式外,圖形的美觀程度可能是我們最關(guān)心的了。將它放到第一部分,因?yàn)轱L(fēng)格設(shè)置是一些通用性的操作,對(duì)于各種繪圖方法都適用。
讓我們先看一個(gè)例子。
- %matplotlib inline
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- import seaborn as sns
- np.random.seed(sum(map(ord, "aesthetics")))
我們定義了一個(gè)簡(jiǎn)單的方程來(lái)繪制一些偏置的正弦波,用來(lái)幫助我們查看不同的圖畫(huà)風(fēng)格是什么樣子的。
- 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)
matplotlib
默認(rèn)參數(shù)下繪制結(jié)果是這樣的:
sinplot()
轉(zhuǎn)換為seaborn
默認(rèn)繪圖,可以簡(jiǎn)單的用set()
方法。
- sns.set()
- sinplot()
Seaborn
將 matplotlib
的參數(shù)劃分為兩個(gè)獨(dú)立的組合。第一組是設(shè)置繪圖的外觀風(fēng)格的,第二組主要將繪圖的各種元素按比例縮放的,以至可以嵌入到不同的背景環(huán)境中。
操控這些參數(shù)的接口主要有兩對(duì)方法:
控制風(fēng)格:axes_style()
, set_style()
縮放繪圖:plotting_context()
, set_context()
每對(duì)方法中的第一個(gè)方法(axes_style()
, plotting_context()
)會(huì)返回一組字典參數(shù),而第二個(gè)方法(set_style()
, set_context()
)會(huì)設(shè)置matplotlib的默認(rèn)參數(shù)。
有五種seaborn
的風(fēng)格,它們分別是:darkgrid, whitegrid, dark, white, ticks。它們各自適合不同的應(yīng)用和個(gè)人喜好。默認(rèn)的主題是darkgrid。
- sns.set_style("whitegrid")
- data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
- sns.boxplot(data=data);
- sns.set_style("dark")
- sinplot()
- sns.set_style("white")
- sinplot()
- sns.set_style("ticks")
- sinplot()
white 和 ticks兩個(gè)風(fēng)格都能夠移除頂部和右側(cè)的不必要的軸脊柱。通過(guò)matplotlib
參數(shù)是做不到這一點(diǎn)的,但是你可以使用seaborn
的despine()
方法來(lái)移除它們:
- sinplot()
- sns.despine()
一些繪圖也可以針對(duì)數(shù)據(jù)將軸脊柱進(jìn)行偏置,當(dāng)然也是通過(guò)調(diào)用despine()
方法來(lái)完成。而當(dāng)刻度沒(méi)有完全覆蓋整個(gè)軸的范圍時(shí),trim
參數(shù)可以用來(lái)限制已有脊柱的范圍。
- f, ax = plt.subplots()
- sns.violinplot(data=data)
- sns.despine(offset=10, trim=True);
你也可以通過(guò)despine()
控制哪個(gè)脊柱將被移除。
- sns.set_style("whitegrid")
- sns.boxplot(data=data, palette="deep")
- sns.despine(left=True)
雖然來(lái)回切換風(fēng)格很容易,但是你也可以在一個(gè)with
語(yǔ)句中使用axes_style()
方法來(lái)臨時(shí)的設(shè)置繪圖參數(shù)。這也允許你用不同風(fēng)格的軸來(lái)繪圖:
- with sns.axes_style("darkgrid"):
- plt.subplot(211)
- sinplot()
- plt.subplot(212)
- sinplot(-1)
如果你想定制化seaborn
風(fēng)格,你可以將一個(gè)字典參數(shù)傳遞給axes_style()
和set_style()
的參數(shù)rc
。而且你只能通過(guò)這個(gè)方法來(lái)覆蓋風(fēng)格定義中的部分參數(shù)。
如果你想要看看這些參數(shù)都是些什么,可以調(diào)用這個(gè)方法,且無(wú)參數(shù),這將會(huì)返回下面的設(shè)置:
- sns.axes_style()
- {'axes.axisbelow': True,
- 'axes.edgecolor': '.8',
- 'axes.facecolor': 'white',
- 'axes.grid': True,
- 'axes.labelcolor': '.15',
- 'axes.linewidth': 1.0,
- 'figure.facecolor': 'white',
- 'font.family': [u'sans-serif'],
- 'font.sans-serif': [u'Arial',
- u'DejaVu Sans',
- u'Liberation Sans',
- u'Bitstream Vera Sans',
- u'sans-serif'],
- 'grid.color': '.8',
- 'grid.linestyle': u'-',
- 'image.cmap': u'rocket',
- 'legend.frameon': False,
- 'legend.numpoints': 1,
- 'legend.scatterpoints': 1,
- 'lines.solid_capstyle': u'round',
- 'text.color': '.15',
- 'xtick.color': '.15',
- 'xtick.direction': u'out',
- 'xtick.major.size': 0.0,
- 'xtick.minor.size': 0.0,
- 'ytick.color': '.15',
- 'ytick.direction': u'out',
- 'ytick.major.size': 0.0,
- 'ytick.minor.size': 0.0}
然后,你可以設(shè)置這些參數(shù)的不同版本了。
- sns.set_style("darkgrid", {"axes.facecolor": ".9"})
- sinplot()
有一套的參數(shù)可以控制繪圖元素的比例。
首先,讓我們通過(guò)set()
重置默認(rèn)的參數(shù):
sns.set()
有四個(gè)預(yù)置的環(huán)境,按大小從小到大排列分別為:paper, notebook, talk, poster。其中,notebook是默認(rèn)的。
- sns.set_context("paper")
- sinplot()
- sns.set_context("talk")
- sinplot()
- sns.set_context("poster")
- sinplot()
你可以通過(guò)使用這些名字中的一個(gè)調(diào)用set_context()
來(lái)設(shè)置參數(shù),并且你可以通過(guò)提供一個(gè)字典參數(shù)值來(lái)覆蓋參數(shù)。當(dāng)改變環(huán)境時(shí),你也可以獨(dú)立的去縮放字體元素的大小。
- sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
- sinplot()
同樣的,你可以通過(guò)嵌入with
語(yǔ)句臨時(shí)的控制繪圖的比例。
總結(jié)
介紹了Seaborn的5中繪圖風(fēng)格
移除軸脊柱
臨時(shí)設(shè)置繪圖風(fēng)格
覆蓋Seaborn風(fēng)格元素
繪圖元素比例縮放
下一節(jié)將會(huì)介紹顏色風(fēng)格的使用。
聯(lián)系客服