将观测值数量添加到水平的箱形图海洋

时间:2020-09-13 16:14:34

标签: python pandas matplotlib seaborn boxplot

我想在seaborn的水平框图中添加观察点(点)的数量-理想情况是在晶须上方,如果不可能的话,在中间值旁边。也可以选择这两个位置中的任何一个,但最不推荐。

为此,我尝试从其他地方(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();

结果显示了箱图外的观测值(点)数量-请参见下图的左下角。enter image description here

如何按照问题顶部的说明,以编程方式将(点)移至图中?

1 个答案:

答案 0 :(得分:1)

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();