将观察数添加到水平箱线图中

2024-06-28 15:30:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在seaborn的水平方框图中添加观察数(NOB)——理想情况下在胡须上方,如果不可能,在中值旁边。这些位置的替代品也可以,但最不可取

为此,我尝试改编来自其他地方(https://python-graph-gallery.com/38-show-number-of-observation-on-boxplot/)的代码,展示如何对垂直箱线图执行此操作,但在将其改编为水平箱线图时遇到困难

这是我迄今为止的尝试:

df = sns.load_dataset("iris")

ax = sns.boxplot(y="species", x="sepal_length", data=df)
 
# Calculate number of obs per group & median to position labels
medians = df.groupby(['species'])['sepal_length'].median().values
nobs = df['species'].value_counts().values
nobs = [str(x) for x in nobs.tolist()]
nobs = ["n: " + i for i in nobs]
 
# Add it to the plot
pos = range(len(nobs))
for tick,label in zip(pos,ax.get_xticklabels()):
 ax.text(pos[tick], medians[tick],nobs[tick],
         color='black', verticalalignment = "bottom")

sns.despine()

plt.show();

结果显示了箱线图之外的观测值(NOB)数量——见下图左下角。enter image description here

如何以编程方式将(NOB)移动到图中,如问题顶部所述


Tags: ofinposnumberdfforshow水平
1条回答
网友
1楼 · 发布于 2024-06-28 15:30:11

box

根据@JohanC的评论,它运行良好。请检查代码片段

import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset("iris")
ax = sns.boxplot(y="species", x="sepal_length", data=df) 
medians = df.groupby(['species'])['sepal_length'].median().values
nobs = df['species'].value_counts().values
nobs = [str(x) for x in nobs.tolist()]
nobs = ["n: " + i for i in nobs] 
pos = range(len(nobs))
for tick,label in zip(pos,ax.get_yticklabels()):
    ax.text(medians[tick],tick,nobs[tick],color='black', verticalalignment = "bottom")
sns.despine()
plt.show();

相关问题 更多 >