簡體   English   中英

是否有可能用每組中的觀察次數注釋一個seaborn小提琴圖?

[英]Is it possible to annotate a seaborn violin plot with number of observations in each group?

我想用每組中的觀察數量來注釋我的小提琴情節。 所以問題基本上與這個問題相同,除了:

  • python而不是R,
  • seaborn而不是ggplot,和
  • 小提琴情節而不是箱形圖

讓我們從Seaborn API文檔中獲取此示例:

import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips)

我希望在小提琴之上有n = 62,n = 19,n = 87,並且n = 76。 這可行嗎?

在這種情況下,我喜歡預先計算帶注釋的值並將它們合並到分類軸中。 換句話說,預計算例如“Thurs,N = xxx”

看起來像這樣:

import seaborn as sns
sns.set_style("whitegrid")
ax= (
    sns.load_dataset("tips")
       .assign(count=lambda df: df['day'].map(df.groupby(by=['day'])['total_bill'].count()))
       .assign(grouper=lambda df: df['day'].astype(str) + '\nN = ' + df['count'].astype(str))
       .sort_values(by='day') 
       .pipe((sns.violinplot, 'data'), x="grouper", y="total_bill")
       .set(xlabel='Day of the Week', ylabel='Total Bill (USD)')   
)

在此輸入圖像描述

您首先需要存儲y位置和x位置的所有值(使用您的數據集)以便使用ax.text ,然后一個簡單的for循環可以在所需位置寫入所有內容:

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips)

yposlist = tips.groupby(['day'])['total_bill'].median().tolist()
xposlist = range(len(yposlist))
stringlist = ['n = 62','n = 19','n = 87','n = 76']

for i in range(len(stringlist)):
    ax.text(xposlist[i], yposlist[i], stringlist[i])

plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM