Seaborn 是一個基於 Matplotlib 的高階資料視覺化庫,專為統計圖表設計。與 Matplotlib 相比,Seaborn 提供了更簡潔的語法、更美觀的預設樣式,以及與 Pandas 的緊密整合,非常適合用於數據分析和探索性資料分析 (EDA)。
在本教學中,我們將詳細介紹 Seaborn 的核心功能,並使用範例來展示如何繪製基本與進階圖表。
確保安裝了 Seaborn 和 Pandas。如果尚未安裝,可以使用以下指令:
pip install seaborn
pip install pandas
pip install matplotlib
在程式中引入必要的模組:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
Seaborn 提供了多種樣式來改變圖表的外觀:
sns.set_theme(style="darkgrid") # 設定樣式為深色網格
其他可用樣式:
white
dark
whitegrid
ticks
可以直接設定調色板:
sns.set_palette("pastel") # 設定調色板為柔和色系
# 加載內建資料集
tips = sns.load_dataset("tips")
# 繪製散點圖
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title("Total Bill vs Tip")
plt.show()
sns.scatterplot(x="total_bill", y="tip", hue="sex", style="time", data=tips)
plt.title("Scatterplot with Categories")
plt.show()
hue
: 用於按類別改變顏色。style
: 用於改變標記的形狀。sns.histplot(tips["total_bill"], bins=20, kde=True)
plt.title("Distribution of Total Bill")
plt.show()
bins
: 設置直方圖的區間數。kde
: 是否繪製核密度估計曲線。sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Box Plot of Total Bill by Day")
plt.show()
sns.boxplot(x="day", y="total_bill", hue="sex", data=tips)
plt.title("Box Plot by Day and Sex")
plt.show()
sns.barplot(x="day", y="total_bill", data=tips, errorbar="sd")
plt.title("Average Total Bill by Day")
plt.show()
x="day"
:指定X軸為「day」列,表示星期幾(如週一、週二等)。y="total_bill"
:指定Y軸為「total_bill」列,表示每位顧客在餐廳的消費總額。data=tips
:指定資料來源為已載入的 tips 資料集。errorbar="sd"
:表示誤差棒使用標準差來表示資料的變異性。每個柱子的頂部會顯示該類別的消費總額的標準差。熱力圖適合用於顯示矩陣資料,例如相關係數:
# 只選擇數值型列計算相關係數矩陣
numeric_cols = tips.select_dtypes(include=['float64', 'int64']) # 選擇數值型列
corr = numeric_cols.corr() # 計算相關係數矩陣
# 繪製熱力圖
sns.heatmap(corr, annot=True, cmap="coolwarm")
plt.title("Correlation Heatmap")
plt.show()
配對圖可以一次性展示數據集中多列之間的散點圖和分布:
sns.pairplot(tips, hue="sex", diag_kind="kde")
plt.show()
hue
: 按類別上色。diag_kind
: 設定對角線上的圖形類型,如直方圖或 KDE。分面圖可以按類別分組繪製多個子圖:
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True)
g.map(sns.scatterplot, "total_bill", "tip")
plt.show()
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal", hue="event", style="region", data=fmri)
plt.title("Line Plot Example")
plt.show()
Seaborn 可以直接處理 Pandas 的 DataFrame,並按列名指定數據來源:
sns.histplot(data=tips, x="total_bill", hue="sex", kde=True)
plt.title("Histogram with Pandas Integration")
plt.show()
可以使用 Matplotlib 的 plt.figure()
方法調整圖表大小:
plt.figure(figsize=(10, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Custom Figure Size")
plt.show()
Seaborn 支援多種內建調色板:
sns.set_palette("muted") # 使用內建 muted 調色板
tips
,繪製「每天平均小費」的柱狀圖。通過不斷練習和實際應用,你將能夠熟練使用 Seaborn 為資料分析提供清晰且專業的視覺化圖表!