
Seaborn 是一個基於 Matplotlib 的 Python 資料視覺化庫,旨在使統計圖形的繪製更加簡便且美觀。它特別適合進行探索性數據分析,並且提供了許多方便的 API 來快速生成各類圖形。
該使用 Seaborn 還是使用 Matplotlib ?
- Matplotlib 適合需要高度自定義和控制的情況,尤其是在進行更複雜的、非標準的視覺化時。
- Seaborn 適合進行快速的探索性數據分析,或是在需要美觀的統計圖表時使用。它特別適合與 Pandas 數據框整合,用於視覺化數據的分佈和關係。
Seaborn 提供了一個簡單且美觀的方式來進行資料視覺化,尤其是在進行統計分析時。Matplotlib 則提供了更靈活和強大的自定義功能,但可能需要更多的代碼和設置。兩者常常被結合使用,根據需要選擇適合的工具來進行視覺化。
【資料分析】python資料視覺化,Matplotlib基礎操作語法彙整
該選擇什麼圖來表現數據?
- 散佈圖
sns.scatterplot
: 當你想探索兩個連續變數之間的關係時,使用散佈圖。 - 折線圖
sns.lineplot
: 當你需要展示數據隨時間或其他連續變數變化的趨勢時,使用折線圖。 - 柱狀圖
sns.barplot
: 當你想比較分類變數的平均值或總值時,使用柱狀圖。 - 直方圖
sns.histplot
: 當你需要了解數據的分佈狀況時,使用直方圖。 - 箱線圖
sns.boxplot
: 當你想展示數據的集中趨勢及離群點時,使用箱線圖。 - 熱力圖
sns.heatmap
: 當你想可視化變數之間的相關性或矩陣數據時,使用熱力圖。 - 成對圖
sns.pairplot
: 當你需要同時查看多個變數之間的兩兩關係時,使用成對關係圖。
散佈圖 sns.scatterplot
用於顯示兩個數值變量之間的關係,並可以通過顏色和大小來表示其他維度。
import seaborn as sns
import matplotlib.pyplot as plt
# 加載內建的 iris 數據集
iris = sns.load_dataset("iris")
# 繪製散佈圖
sns.scatterplot(x="sepal_length", y="sepal_width", hue="species", data=iris)
plt.show()

適合情境
- 變數間的關係:當你想要觀察兩個連續變數之間的關係時,散佈圖是理想的選擇。例如,觀察總賬單金額 (
total_bill
) 與小費 (tip
) 之間的關係。 - 分類變數的影響:你可以使用
hue
、style
或size
參數來檢視分類變數如何影響變數之間的關係。
散佈圖參數調整
import seaborn as sns
import matplotlib.pyplot as plt
# 生成樣本數據
tips = sns.load_dataset("tips")
# 繪製散佈圖
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time", size="size", palette="viridis", alpha=0.7)
plt.title('Scatterplot of Total Bill vs Tip')
plt.show()

參數說明
x
:X 軸數據y
:Y 軸數據hue
:根據某變量的值來調整點的顏色style
:根據某變量的值來調整點的樣式size
:根據某變量的值來調整點的大小palette
:設置顏色調色盤alpha
:設置點的透明度
折線圖 sns.lineplot
用於顯示數值變量隨著某一維度(通常是時間)變化的趨勢。
# 加載內建的 flights 數據集
flights = sns.load_dataset("flights")
# 繪製折線圖
sns.lineplot(x="year", y="passengers", data=flights)
plt.show()

適合情境
- 時間序列分析:當你想要觀察變數隨著時間的變化趨勢時,折線圖非常適合。例如,觀察某產品在一段時間內的銷售趨勢。
- 多組比較:當你有多組數據需要在同一張圖中比較時,使用
hue
和style
來區分不同的組別。
折線圖參數調整
# 繪製折線圖
sns.lineplot(data=tips, x="size", y="total_bill", hue="day", style="time", markers=True, dashes=False, errorbar="sd")
plt.title('Lineplot of Total Bill by Party Size')
plt.show()

參數說明
x
:X 軸數據y
:Y 軸數據hue
:根據某變量的值來調整線條顏色style
:根據某變量的值來調整線條樣式markers
:設置是否顯示標記點dashes
:設置是否顯示虛線errorbar
:設置置信區間
柱狀圖 sns.barplot
用於顯示類別變量與數值變量之間的關係,通常用於比較不同組別的平均值。
# 繪製柱狀圖
sns.barplot(x="species", y="sepal_width", data=iris)
plt.show()

適合情境
- 分類變數的比較:當你想要比較分類變數的平均值或總值時,柱狀圖是理想的選擇。例如,觀察不同日期的總賬單金額的平均值。
- 組間比較:使用
hue
可以觀察不同組別間的差異,例如性別對總賬單金額的影響。
柱狀圖參數調整
# 繪製條形圖
sns.barplot(data=tips, x="day", y="total_bill", hue="sex", errorbar="sd", palette="coolwarm")
plt.title('Barplot of Total Bill by Day and Sex')
plt.show()

參數說明
x
:X 軸數據(分類變量)y
:Y 軸數據(數值變量)hue
:根據某變量的值來調整柱子的顏色errorbar
:設置置信區間estimator
:設置用於計算條形高度的函數(默認為平均值)palette
:設置顏色調色盤
直方圖 sns.histplot
用於顯示數值變量的分佈情況,可以用於單一變量或多變量的直方圖繪製。
# 繪製直方圖
sns.histplot(iris["sepal_length"], kde=True)
plt.show()

適合情境
- 數據分佈:當你想要了解某個變數的數據分佈時,直方圖是最佳選擇。例如,觀察顧客的小費分佈情況。
- 多組分佈比較:使用
hue
可以觀察不同組別的數據分佈情況,例如性別對小費分佈的影響。
直方圖參數調整
# 繪製直方圖
sns.histplot(data=tips, x="total_bill", hue="sex", bins=20, kde=True, palette="magma")
plt.title('Histogram of Total Bill')
plt.show()

參數說明
x
:X 軸數據y
:Y 軸數據(可選)hue
:根據某變量的值來調整顏色bins
:設置直方圖的分箱數量multiple
:設置如何處理不同類別的數據(例如stack
或dodge
)kde
:設置是否顯示核密度估計
熱力圖 sns.heatmap
用於顯示矩陣數據的顏色編碼表示,通常用於顯示相關矩陣或數據透視表。
# 繪製熱力圖
flights_pivot = flights.pivot("month", "year", "passengers")
sns.heatmap(flights_pivot, annot=True, fmt="d")
plt.show()

適合情境
- 相關矩陣的可視化:當你想要檢視多個變數之間的相關性時,熱力圖是一個很好的工具。例如,觀察各變數之間的相關係數。
- 矩陣數據的可視化:可以用來表示其他類型的矩陣數據,例如混淆矩陣。
熱力圖參數調整
# 繪製熱力圖
correlation_matrix = tips.corr()
sns.heatmap(data=correlation_matrix, annot=True, fmt=".2f", cmap="coolwarm", linewidths=0.5, linecolor="black")
plt.title('Correlation Matrix Heatmap')
plt.show()

參數說明
data
:矩陣數據(如相關矩陣)annot
:設置是否在每個格子中顯示數值fmt
:設置顯示數值的格式(如.2f
顯示兩位小數)cmap
:設置顏色地圖linewidths
:設置格子之間的間隔線寬度linecolor
:設置格子之間的間隔線顏色
成對圖 sns.pairplot
用於顯示數據集中所有變量之間的成對關係,特別適合初步探索數據的關聯性。
# 繪製成對圖
sns.pairplot(iris, hue="species")
plt.show()

適合情境
- 變數之間的成對關係:當你想要觀察多個變數之間的成對關係時,成對關係圖可以幫助你一次性查看所有變數的兩兩關係。例如,觀察小費數據集中的所有變數之間的關係。
- 數據探索:在初步探索數據集時,可以快速了解數據集中各變數之間的關聯和分佈情況。
成對圖參數調整
# 繪製成對關係圖
sns.pairplot(data=tips, hue="sex", palette="husl", kind="scatter", diag_kind="kde")
plt.title('Pairplot of Tips Dataset')
plt.show()

參數說明
hue
:根據某變量的值來調整顏色palette
:設置顏色調色盤kind
:設置散佈圖的類型(如scatter
或kde
)diag_kind
:設置對角線圖的類型(如hist
或kde
)
箱線圖 sns.boxplot
用於顯示數值變量的分佈情況及其異常值,通常用於比較多個組別的數值變量。
# 繪製箱線圖
sns.boxplot(x="species", y="sepal_length", data=iris)
plt.show()

適合情境
- 數據的集中趨勢與離群點:當你需要觀察數據的集中趨勢(如中位數)和數據的離群點時,箱線圖是非常有用的。例如,觀察不同日期的總賬單金額分佈及離群點。
- 組間分佈比較:使用
hue
可以比較不同組別之間的數據分佈差異,例如性別對總賬單金額分佈的影響。
箱線圖參數調整
# 繪製箱線圖
sns.boxplot(data=tips, x="day", y="total_bill", hue="sex", palette="Set2", fliersize=5)
plt.title('Boxplot of Total Bill by Day and Sex')
plt.show()

參數說明
x
:X 軸數據(分類變量)y
:Y 軸數據(數值變量)hue
:根據某變量的值來調整箱線圖的顏色palette
:設置顏色調色盤fliersize
:設置離群點的大小width
:設置箱線圖的寬度