Seaborn 是一個基於 Matplotlib 的高階資料視覺化庫,專為統計圖表設計。與 Matplotlib 相比,Seaborn 提供了更簡潔的語法、更美觀的預設樣式,以及與 Pandas 的緊密整合,非常適合用於數據分析和探索性資料分析 (EDA)。
在本教學中,我們將詳細介紹 Seaborn 的核心功能,並使用範例來展示如何繪製基本與進階圖表。
如果還沒有準備好Python的環境的話,我們推薦超好用的Python集成開發環境-PyCharm!安裝教學文章連結點此:[Python教學] 開發環境安裝與設定教學-Pycharm。
1. 安裝與載入 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
2. Seaborn 的主要特點
- 內建樣式: Seaborn 提供預設的美觀主題,讓圖表看起來更專業。
- 與 Pandas 的整合: Seaborn 可以直接接受 Pandas 的 DataFrame 作為資料來源。
- 簡化的語法: 繪製統計圖表更加簡潔,且支援高階功能如分組、調色板等。
- 內建資料集: 提供多個內建資料集,方便用於學習和測試。
3. 使用 Seaborn 的樣式設定
Seaborn 提供了多種樣式來改變圖表的外觀:
sns.set_theme(style="darkgrid") # 設定樣式為深色網格
其他可用樣式:
white
dark
whitegrid
ticks
可以直接設定調色板:
sns.set_palette("pastel") # 設定調色板為柔和色系
4. Seaborn 的基礎圖表
4.1 散點圖 (Scatter Plot)
# 加載內建資料集
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
: 用於改變標記的形狀。

4.2 直方圖 (Histogram)
sns.histplot(tips["total_bill"], bins=20, kde=True)
plt.title("Distribution of Total Bill")
plt.show()
bins
: 設置直方圖的區間數。kde
: 是否繪製核密度估計曲線。

4.3 箱型圖 (Box Plot)
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()

4.4 長條圖 (Bar Plot)
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"
:表示誤差棒使用標準差來表示資料的變異性。每個柱子的頂部會顯示該類別的消費總額的標準差。

4.5 熱力圖 (Heatmap)
熱力圖適合用於顯示矩陣資料,例如相關係數:
# 只選擇數值型列計算相關係數矩陣
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()

5. 進階功能
5.1 配對圖 (Pair Plot)
配對圖可以一次性展示數據集中多列之間的散點圖和分布:
sns.pairplot(tips, hue="sex", diag_kind="kde")
plt.show()
hue
: 按類別上色。diag_kind
: 設定對角線上的圖形類型,如直方圖或 KDE。

5.2 分面圖 (FacetGrid)
分面圖可以按類別分組繪製多個子圖:
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True)
g.map(sns.scatterplot, "total_bill", "tip")
plt.show()

5.3 折線圖 (Line Plot)
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal", hue="event", style="region", data=fmri)
plt.title("Line Plot Example")
plt.show()

6. 與 Pandas 的整合
Seaborn 可以直接處理 Pandas 的 DataFrame,並按列名指定數據來源:
sns.histplot(data=tips, x="total_bill", hue="sex", kde=True)
plt.title("Histogram with Pandas Integration")
plt.show()

7. 調整 Seaborn 圖表的外觀
7.1 圖表大小
可以使用 Matplotlib 的 plt.figure()
方法調整圖表大小:
plt.figure(figsize=(10, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Custom Figure Size")
plt.show()
7.2 自訂調色板
Seaborn 支援多種內建調色板:
sns.set_palette("muted") # 使用內建 muted 調色板

8. 小結與實踐
- 簡單易用: Seaborn 通過簡潔的語法生成美觀的圖表。
- 強大功能: 支援分組繪圖、分面圖及內建樣式。
- 與 Pandas 整合: 輕鬆處理 DataFrame 資料。
9. 課後練習
- 使用內建資料集
tips
,繪製「每天平均小費」的柱狀圖。 - 使用自己的數據,生成一個相關係數的熱力圖。
- 將 Seaborn 的繪圖與 Matplotlib 的自訂功能結合,製作報表。
通過不斷練習和實際應用,你將能夠熟練使用 Seaborn 為資料分析提供清晰且專業的視覺化圖表!