資料視覺化是分析和呈現資料最強大的工具之一。 Seaborn 是一個基於 Matplotlib 建構的 Python 函式庫,提供了用於建立資訊豐富且多樣化的視覺化的高階介面。本文將引導您選擇正確的 Seaborn 繪圖、對其進行自訂以使其清晰,並避免常見的陷阱。
為什麼選擇正確的繪圖類型很重要?
您選擇的繪圖類型直接影響資料呈現其見解和資訊的有效性。
散佈圖揭示了變數之間的相關性。
熱圖簡化了大規模比較。
使用錯誤的繪圖類型可能會導致誤解,有時,由於我們選擇了錯誤的可視化,這些來自數據的見解被隱藏起來而永遠不會被揭示。
Seaborn 圖分為三個主要類別:關係、分佈 和分類。以下是如何選擇和使用它們。
資料來源:https://seaborn.pydata.org/_images/function_overview_8_0.png
關係圖視覺化兩個變數之間的關係,通常是數值關係。 Seaborn 提供兩種主要類型的關係圖:散佈圖和線條圖。您可以使用relplot() 函數來建立這些圖。
sns.relplot( data=tips, x="total_bill", y="tip", hue="smoker",> <p><img src="https://img.php.cn/upload/article/000/000/000/173294521670198.jpg" alt="Seaborn Plot Selection Made Easy: How to Visualize Your Data Effectively"><br> source: seaborn documentation</p> <p>Alternatively, you can use the scatterplot() function directly for scatter plots, which produce the same result. For line plots, you can either use relplot() with kind="line" or the more direct lineplot() function.<br> </p> <pre class="brush:php;toolbar:false">fmri = sns.load_dataset("fmri") sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
或者你可以這樣寫:
fmri = sns.load_dataset("fmri") sns.lineplot(data=fmri, x="timepoint", y="signal")
結果還是一樣。
來源:seaborn 文件
散佈圖顯示各個資料點,可以輕鬆識別模式或相關性。另一方面,線圖非常適合展示一段時間內或跨類別的趨勢。
了解變數的分佈是分析或建模資料的關鍵的第一步。分佈圖旨在揭示單一變數的分佈或離散度。這些視覺化可以快速解決關鍵問題,例如:資料覆蓋什麼範圍?其中心趨勢是什麼?資料是否向特定方向傾斜?
與關係圖一樣,可以使用 displot() 函數透過指定 kind 參數來選擇所需的繪圖類型來建立分佈圖。或者,您可以直接使用 histplot()、kdeplot()、ecdfplot() 或 rugplot() 等函數來實現特定的分佈視覺化。
histplot() 函數非常適合視覺化頻率分佈。
sns.relplot( data=tips, x="total_bill", y="tip", hue="smoker",> <p><img src="https://img.php.cn/upload/article/000/000/000/173294521670198.jpg" alt="Seaborn Plot Selection Made Easy: How to Visualize Your Data Effectively"><br> source: seaborn documentation</p> <p>Alternatively, you can use the scatterplot() function directly for scatter plots, which produce the same result. For line plots, you can either use relplot() with kind="line" or the more direct lineplot() function.<br> </p> <pre class="brush:php;toolbar:false">fmri = sns.load_dataset("fmri") sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
來源:seaborn 文件
kdeplot() 較適合顯示平滑的分佈曲線,而 ecdfplot() 則強調累積比例。 rugplot() 為原始資料點添加詳細標記,以更精細的細節增強其他視覺化效果。
Seaborn 也支援使用 heatmap() 等工具視覺化二元分佈。熱圖對於說明相關矩陣或進行比較特別有效。
分類圖旨在視覺化按類別組織的資料。建立這些繪圖的一般方法是使用 catplot() 函數,指定 kind 參數來選擇所需的繪圖類型。這些地塊分為三個主要係列。
選擇正確的分類圖類型取決於您要回答的特定問題。這些圖表提供了分析分類資料的多種視角:
- 分類散點圖
這些圖顯示類別內的各個資料點,有助於識別模式或分佈。範例包括 stripplot() 和 swarmplot()。
fmri = sns.load_dataset("fmri") sns.lineplot(data=fmri, x="timepoint", y="signal")
來源:seaborn 文件
- 分類分佈圖
這些圖表總結了類別內的資料分佈,提供了對變異性、分佈和集中趨勢的見解。範例包括 boxplot()、violinplot() 和 boxenplot()。
- 分類估計圖
這些圖表計算總和估計值(例如平均值)並包含誤差線以顯示變異性或信賴區間。範例包括 barplot()、pointplot() 和 countplot()。
在繪製之前,先問自己這些問題:
資料是分類資料、數值資料還是兩者兼具?
您在探索關係、分佈或比較嗎?
資料集的大小和比例是多少?
了解您的數據可以引導您使用最合適的視覺化工具。下面的架構來自 Kaggle,展示如何根據您擁有的資料類型選擇圖表。
來源:kaggle
讓我們使用現實世界的數據來實現這一點。考慮來自Kaggle 的資料集,其中包含20 列,包括學習時間、出席率、家長參與、資源獲取、課外活動、睡眠時間、以前的分數、動機水平、互聯網訪問、輔導課程、家庭收入、教師品質、學校等特徵類型、同儕影響、體力活動、學習障礙、父母教育程度、離家距離、性別和考試成績。
sns.relplot( data=tips, x="total_bill", y="tip", hue="smoker",> <p><img src="https://img.php.cn/upload/article/000/000/000/173294521670198.jpg" alt="Seaborn Plot Selection Made Easy: How to Visualize Your Data Effectively"><br> source: seaborn documentation</p> <p>Alternatively, you can use the scatterplot() function directly for scatter plots, which produce the same result. For line plots, you can either use relplot() with kind="line" or the more direct lineplot() function.<br> </p> <pre class="brush:php;toolbar:false">fmri = sns.load_dataset("fmri") sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
fmri = sns.load_dataset("fmri") sns.lineplot(data=fmri, x="timepoint", y="signal")
sns.displot(penguins, x="flipper_length_mm", hue="sex", multiple="dodge")
sns.relplot( data=tips, x="total_bill", y="tip", hue="smoker",> <p><img src="https://img.php.cn/upload/article/000/000/000/173294521670198.jpg" alt="Seaborn Plot Selection Made Easy: How to Visualize Your Data Effectively"><br> source: seaborn documentation</p> <p>Alternatively, you can use the scatterplot() function directly for scatter plots, which produce the same result. For line plots, you can either use relplot() with kind="line" or the more direct lineplot() function.<br> </p> <pre class="brush:php;toolbar:false">fmri = sns.load_dataset("fmri") sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
使用 plt.title()、plt.xlabel() 和 plt.ylabel() 等函數加入標題和標籤,提高視覺化的清晰度。要合併分類維度,請利用 Seaborn 中的色調屬性,它允許您根據資料集中的特定列來區分資料點。使用 set_palette() 函數使用 Coolwarm、husl 或 Set2 等調色板自訂配色方案。此外,透過使用 sns.set_theme() 調整資料點的樣式或大小並使用 plt.figure(figsize=(width, height)) 定義圖形尺寸來區分資料點。
為了透過資料視覺化有效地傳達見解,在提供足夠的資訊和避免繪圖過度擁擠之間取得平衡至關重要。圖表中過多的數據點可能會讓觀眾不知所措,而細節不足可能會導致混亂。始終包含清晰的軸標籤和圖例,並確保視覺化強調您想要強調的關鍵見解。
另一個常見問題是創造誤導性的視覺化效果。為了防止這種情況,請確保軸適當縮放以準確地表示資料。
選擇正確的 Seaborn 圖是增強資料理解和有效傳達見解的關鍵一步。適當的視覺化可以揭示可能隱藏的模式、關係和趨勢。透過讓情節類型與您的資料結構和分析目標保持一致(無論是探索分佈、關係還是比較),您可以確保故事敘述的清晰度和精確度。
資料視覺化既是一門藝術,也是一門科學。不要猶豫,嘗試不同的 Seaborn 情節來發現新的觀點或完善您的見解。透過實踐和創造力,您將能夠充分利用 Seaborn 的潛力,將原始數據轉化為引人注目的視覺敘事。
以上是Seaborn 繪圖選擇變得簡單:如何有效地視覺化您的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!