Seaborn是一個基于matplotlib的Python資料可視化庫。它提供了一個進階界面,用于繪制具有吸引力和資訊豐富的統計圖形。
Seaborn旨在使可視化成為探索和了解資料的核心部分。它的面向資料集的繪圖函數對包含整個資料集的資料流和數組進行操作,并在内部執行必要的語義映射和統計聚合以生成資訊圖。
seaborn提供的功能包括:
- 檢查多個變量之間的關系
- 支援使用分類變量來顯示觀察結果或彙總統計資料
- 可視化單變量或雙變量分布以及在資料子集之間進行比較
- 不同類型因變量線性回歸模型的自動估計與作圖
- 檢視複雜資料集的總體結構
- 建構多圖組合的進階可視化
- 通過幾個内置主題實作對matplotlib圖形樣式的簡潔控制
- 工具選擇調色闆
散點圖
# 導入seaborn庫import seaborn as sns# 應用預設的seaborn主題、縮放和調色闆sns.set()# 加載一個示例資料集tips = sns.load_dataset("tips")# 可視化sns.relplot(x="total_bill", y="tip", col="time", hue="smoker", style="smoker", size="size", data=tips)
線圖:适用于時間序列資料
dots = sns.load_dataset("dots")sns.relplot(x="time", y="firing_rate", col="align", hue="choice", size="coherence", style="choice", facet_kws=dict(sharex=False), kind="line", legend="full", data=dots)
統計估計和誤差線注釋
fmri = sns.load_dataset("fmri")sns.relplot(x="timepoint", y="signal", col="region", hue="event", style="event", kind="line", data=fmri)
在估計統計值時,seaborn将使用bootstrapping來計算置信區間并繪制表示估計不确定性的誤差線。seaborn統計不僅僅是描述性統計。例如,也可以使用lmplot()增強散點圖以包含線性回歸模型(及其不确定性):
sns.lmplot(x="total_bill", y="tip", col="time", hue="smoker", data=tips)
分組資料的可視化
标準的散點圖和直線圖顯示數值變量之間的關系,但許多資料分析涉及分類變量。在seaborn中有幾種專門的繪圖類型,它們都經過了優化,用于可視化這類資料。
分組散點圖
sns.catplot(x="day", y="total_bill", hue="smoker", kind="swarm", data=tips)
分組小提琴圖
sns.catplot(x="day", y="total_bill", hue="smoker", kind="violin", split=True, data=tips)
分組柱狀圖
sns.catplot(x="day", y="total_bill", hue="smoker", kind="bar", data=tips)
圖形級和軸級的功能
這些工具是如何工作的?了解seaborn繪圖函數之間的主要差別是很重要的。到目前為止顯示的所有圖都是使用“圖形級”功能制作的。這些是為探索性分析而優化的,因為它們設定了包含圖的matplotlib圖,并使可視化很容易跨多個軸展開。他們也處理一些棘手的事情,比如把圖例放在坐标軸之外。要做這些事情,他們使用一個FacetGrid。
每一種不同的圖形級的圖都結合了FacetGrid的一個特定的“軸級”功能。例如,散點圖是使用scatterplot()函數繪制的,條形圖是使用barplot()函數繪制的。這些函數被稱為“軸級”,因為它們隻繪制一個matplotlib軸,而不會影響圖的其他部分。
圖級函數需要控制它所在的圖,而軸級函數可以組合成更複雜的matplotlib圖
import matplotlib.pyplot as pltf, axes = plt.subplots(1, 2, sharey=True, figsize=(6, 4))sns.boxplot(x="day", y="tip", data=tips, ax=axes[0])sns.scatterplot(x="total_bill", y="tip", hue="day", data=tips, ax=axes[1])
控制圖形級函數的大小的工作方式與控制其他matplotlib圖形的工作方式稍有不同。圖形級函數不是設定整體圖形大小,而是通過設定每個方面的大小參數。不是設定每個面的高度和寬度,而是控制高度和寬高比(寬高比)。這種參數化可以很容易地控制圖形的大小,而不需要考慮它将具有多少行和列,盡管這可能會造成混淆:
sns.relplot(x="time", y="firing_rate", col="align", hue="choice", size="coherence", style="choice", height=4.5, aspect=2 / 3, facet_kws=dict(sharex=False), kind="line", legend="full", data=dots)
判斷一個函數是“圖形級”還是“軸級”的方法是看它是否接受ax=參數。還可以根據輸出類型來區分這兩個類: 軸級函數傳回matplotlib軸,而圖級函數傳回FacetGrid。
資料結構可視化
在seaborn中還有另外兩種圖形級函數,可用于對多個圖進行可視化。它們都是面向于闡明資料集的結構。一個是jointplot(),專注于單一的關系:
iris = sns.load_dataset("iris")sns.jointplot(x="sepal_length", y="petal_length", data=iris)
另一個是pairplot(),它具有更廣闊的視圖,顯示所有成對關系和邊緣分布,可選地以分類變量為條件:
sns.pairplot(data=iris, hue="species")
在可視化表示方面,jointplot()和pairplot()都有一些不同的選項,它們都建構在允許更徹底地定制多圖的類之上(分别是JointGrid和PairGrid)。
自定義圖形樣式
繪圖函數隻使用預設的繪圖樣式并添加資訊标簽,如果想建立一個自定義的樣式需要額外的步驟。
第一種方法是使用可選的seaborn主題之一,使您的圖具有不同的外觀。設定不同的主題或調色闆将使它對所有圖生效:
sns.set(style="ticks", palette="muted")sns.relplot(x="total_bill", y="tip", col="time", hue="smoker", style="smoker", size="size", data=tips)
對于特定于圖形的定制,所有seaborn函數都接受一些可選參數,用于切換到非預設語義映射,例如不同的顔色。(正确使用顔色對于有效的資料可視化至關重要,而seaborn對定制調色闆提供了廣泛的支援)。
最後,當與底層的matplotlib函數(如scatterplot()和matplotlib.ax.ax.scatter())直接對應時,額外的關鍵字參數将被傳遞到matplotlib層:
sns.relplot(x="total_bill", y="tip", col="time", hue="size", style="smoker", size="size", palette="YlGnBu", markers=["D", "o"], sizes=(10, 125), edgecolor=".2", linewidth=.5, alpha=.75, data=tips)
對于relplot()和其他圖形級函數,這意味着存在一些間接層,因為relplot()将其exta關鍵字參數傳遞給底層的seaborn axis級函數,後者将其額外的關鍵字參數傳遞給底層的matplotlib函數。
可以通過傳遞給FacetGrid其他參數來完成圖形級函數的一些定制,并且可以使用該對象上的方法來控制圖形的許多其他屬性。為了做更多的調整,可以通路繪制的matplotlib對象,這些對象存儲為屬性:
g = sns.catplot(x="total_bill", y="day", hue="time", height=3.5, aspect=1.5, kind="box", legend=False, data=tips);g.add_legend()g.set_axis_labels("Total bill ($)", "")g.set(xlim=(0, 60), yticklabels=["Thursday", "Friday", "Saturday", "Sunday"])g.despine(trim=True)g.fig.set_size_inches(6.5, 3.5)g.ax.set_xticks([5, 15, 25, 35, 45, 55], minor=True);plt.setp(g.ax.get_yticklabels(), rotation=30)
參考:
https://seaborn.pydata.org/introduction.html