【发布时间】:2020-12-31 12:01:36
【问题描述】:
我想在 seaborn 的水平箱线图中添加观察值(nobs)的数量 - 最好在晶须上方,如果不可能,则在中值旁边。替代这些位置中的任何一个也可以,但最不优选。
为此,我尝试改编其他地方的代码 (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();
结果显示了箱线图之外的观察值(nobs)数量 - 见下图左下角。
如问题顶部所述,如何以编程方式将(nobs)移动到图中?
【问题讨论】:
-
您是否考虑将
get_xticklabels替换为get_yticklabels?也许还可以将pos[tick], medians[tick]的顺序更改为medians[tick],pos[tick]? -
是的,效果很好!谢谢约翰!
标签: python pandas matplotlib seaborn boxplot