Python使用Matplotlib繪制Swarm Plot(蜂群圖)的代碼步驟
Swarm Plot(蜂群圖)是一種數(shù)據(jù)可視化圖表,它用于展示分類數(shù)據(jù)的分布情況。這種圖表通過(guò)將數(shù)據(jù)點(diǎn)沿著一個(gè)或多個(gè)分類變量輕微地分散,以避免它們之間的重疊,從而更好地顯示數(shù)據(jù)的分布密度和分布趨勢(shì)。Swarm Plot特別適用于較小的數(shù)據(jù)集。
為什么使用Swarm Plots?
蜂群圖在以下情況下非常有利:
- 可視化類別內(nèi)的點(diǎn)分布。
- 識(shí)別數(shù)據(jù)中的模式或離群值。
- 通過(guò)顯示單個(gè)數(shù)據(jù)點(diǎn)來(lái)補(bǔ)充其他圖,如箱形圖或小提琴圖。
但是,它們可能會(huì)因大型數(shù)據(jù)集而變得混亂,并且可能不適合涉及多個(gè)變量的復(fù)雜關(guān)系。
使用Matplotlib創(chuàng)建Swarm Plots
雖然Seaborn提供了一種簡(jiǎn)單的方法來(lái)創(chuàng)建蜂群圖,但Matplotlib沒(méi)有用于這種類型圖的內(nèi)置函數(shù)。但是,您可以通過(guò)編寫(xiě)自定義函數(shù)來(lái)創(chuàng)建類似的效果。
要在Matplotlib中創(chuàng)建蜂群圖,關(guān)鍵是操縱數(shù)據(jù)點(diǎn)的x軸位置,使它們水平間隔開(kāi),避免重疊,同時(shí)保持它們的分類分組。
步驟1:導(dǎo)入所需的庫(kù)
首先導(dǎo)入必要的庫(kù),例如Matplotlib、NumPy和Pandas以進(jìn)行數(shù)據(jù)操作。以下是如何使用Matplotlib創(chuàng)建蜂群圖的示例:
import matplotlib.pyplot as plt import numpy as np import pandas as pd
步驟2:生成示例數(shù)據(jù)
對(duì)于本文,讓我們創(chuàng)建一個(gè)表示多個(gè)類別和數(shù)值數(shù)據(jù)的隨機(jī)數(shù)據(jù)集。您可以將其替換為您想要可視化的任何數(shù)據(jù)集。
# Create a sample dataset np.random.seed(0) categories = ['A', 'B', 'C'] data = { 'Category': np.random.choice(categories, size=150), 'Value': np.random.randn(150) } df = pd.DataFrame(data)
步驟3:散點(diǎn)圖準(zhǔn)備
使用Matplotlib的散點(diǎn)函數(shù)繪制各個(gè)點(diǎn)。y軸表示值,而x軸表示類別。
# Create a basic scatter plot plt.scatter(df['Category'], df['Value']) plt.xlabel('Category') plt.ylabel('Value') plt.title('Basic Scatter Plot') plt.show()
輸出
在這個(gè)階段,點(diǎn)將重疊,特別是在密集區(qū)域。下一步是將點(diǎn)隔開(kāi),以獲得更清晰的群體圖效果。
步驟4:添加抖動(dòng)以避免重疊
為了避免數(shù)據(jù)點(diǎn)重疊,您可以向x軸位置添加抖動(dòng)(一個(gè)小的隨機(jī)變化)。這將模擬群集圖的效果,其中點(diǎn)水平分布。
def add_jitter(x, scale=0.05): return x + np.random.uniform(-scale, scale, size=len(x)) df['Jittered_Category'] = df['Category'].apply(lambda x: categories.index(x)) df['Jittered_Category'] = add_jitter(df['Jittered_Category']) # Create a scatter plot with jittered points plt.scatter(df['Jittered_Category'], df['Value'], alpha=0.7) plt.xticks(ticks=range(len(categories)), labels=categories) plt.xlabel('Category') plt.ylabel('Value') plt.title('Swarm Plot with Jittered Points') plt.show()
在這里,add_jitter用于稍微移動(dòng)每個(gè)類別中的點(diǎn)的x軸位置。這樣可以防止重疊,并使點(diǎn)沿分類軸均勻分布。
自定義蜂群圖
1. 使用注釋增強(qiáng)蜂群圖
您可以向蜂群圖添加文本注釋以突出顯示某些數(shù)據(jù)點(diǎn)。當(dāng)您想要指出特定的值或類別時(shí),這特別有用。注釋有助于強(qiáng)調(diào)特定的數(shù)據(jù)點(diǎn)并提供額外的上下文。
# Add annotations to the plot plt.scatter(df['Jittered_Category'], df['Value'], s=50, alpha=0.6) plt.xticks(ticks=range(len(categories)), labels=categories) plt.xlabel('Category') plt.ylabel('Value') plt.title('Swarm Plot with Annotations') # Highlight a point highlight = df.iloc[10] plt.annotate('Highlighted Point', (highlight['Jittered_Category'], highlight['Value']), xytext=(10, 20), textcoords='offset points', arrowprops=dict(arrowstyle='->')) plt.show()
2. 為不同類別添加顏色
要區(qū)分類別,可以使用散點(diǎn)圖中的c參數(shù)為每個(gè)類別添加不同的顏色。
將蜂群圖與其他圖類型疊加
蜂群圖可以與其他類型的圖(如箱線圖或小提琴圖)結(jié)合使用,以提供更全面的數(shù)據(jù)分布視圖。例如,您可以將群圖疊加在箱形圖上。
# Create a box plot plt.boxplot([df[df['Category'] == cat]['Value'] for cat in categories], positions=range(len(categories))) # Overlay the swarm plot plt.scatter(df['Jittered_Category'], df['Value'], c=df['Color'], s=50, alpha=0.6) plt.xticks(ticks=range(len(categories)), labels=categories) plt.xlabel('Category') plt.ylabel('Value') plt.title('Swarm Plot Overlayed on Box Plot') plt.show()
Tips和最佳實(shí)踐
- 數(shù)據(jù)縮放:確保x軸正確縮放,以適應(yīng)抖動(dòng),而不會(huì)過(guò)度重疊。
- 抖動(dòng)靈敏度:您添加的抖動(dòng)量應(yīng)根據(jù)數(shù)據(jù)的密度進(jìn)行調(diào)整。太多的抖動(dòng)會(huì)使圖形混亂。
- 小心使用顏色和標(biāo)記:顏色和形狀的選擇應(yīng)避免混淆,特別是在具有許多類別的復(fù)雜圖中。
總結(jié)
在Matplotlib中創(chuàng)建蜂群圖需要手動(dòng)操作數(shù)據(jù)點(diǎn)的x軸位置以避免重疊。雖然像Seaborn這樣的庫(kù)簡(jiǎn)化了這個(gè)過(guò)程,但Matplotlib提供了根據(jù)特定需求定制蜂群圖的靈活性。通過(guò)添加抖動(dòng)、調(diào)整點(diǎn)大小和透明度以及使用顏色和標(biāo)記形狀,您可以創(chuàng)建有效且視覺(jué)上吸引人的蜂群圖。
以上就是Python使用Matplotlib繪制Swarm Plot(蜂群圖)的代碼步驟的詳細(xì)內(nèi)容,更多關(guān)于Python Matplotlib繪制Swarm Plot的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python常用函數(shù)random()函數(shù)詳解
這篇文章主要介紹了python常用函數(shù)random()函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02Python django框架開(kāi)發(fā)發(fā)布會(huì)簽到系統(tǒng)(web開(kāi)發(fā))
這篇文章主要介紹了Python django框架開(kāi)發(fā)發(fā)布會(huì)簽到系統(tǒng)(web開(kāi)發(fā)),本文通過(guò)實(shí)例代碼效果展示截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Pandas數(shù)據(jù)處理庫(kù)畫(huà)圖與文件讀取使用示例
這篇文章主要為大家介紹了Pandas數(shù)據(jù)處理庫(kù)畫(huà)圖與文件讀取使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Django實(shí)現(xiàn)前臺(tái)上傳并顯示圖片功能
這篇文章主要介紹了Django實(shí)現(xiàn)前臺(tái)上傳并顯示圖片功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Python日期和時(shí)間戳的轉(zhuǎn)換的實(shí)現(xiàn)方式
Python中日期和時(shí)間的處理涉及到time和datetime模塊,time模塊可實(shí)現(xiàn)時(shí)間戳與格式化時(shí)間字符串的轉(zhuǎn)換,而datetime模塊則提供更加直接易用的接口,本文詳細(xì)給大家介紹了Python日期和時(shí)間戳的轉(zhuǎn)換的實(shí)現(xiàn)方式,需要的朋友可以參考下2024-10-10Python解析網(wǎng)頁(yè)源代碼中的115網(wǎng)盤(pán)鏈接實(shí)例
這篇文章主要介紹了Python解析網(wǎng)頁(yè)源代碼中的115網(wǎng)盤(pán)鏈接實(shí)例,主要采用了正則表達(dá)式re模塊來(lái)實(shí)現(xiàn)該功能,需要的朋友可以參考下2014-09-09Python使用正則表達(dá)式實(shí)現(xiàn)爬蟲(chóng)數(shù)據(jù)抽取
這篇文章主要介紹了Python使用正則表達(dá)式實(shí)現(xiàn)爬蟲(chóng)數(shù)據(jù)抽取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08