首页 > 解决方案 > sns.countplot() 可以在绘制的条形图上显示数字吗?

问题描述

我正在使用 MNIST 数据集并用于sns.countplot()绘制火车图像,这给出了在此处输入图像描述

有没有办法在某处添加条的值?每个上面?在里面/下面?目前我看到实际值使用print和干扰,sns.countplot()因为绘图总是在打印之前输出

我正在使用与非常相似的代码,但我仍然没有得到任何注释。

# print and plot digit count
plt.figure(figsize=(12,5))
digit_count = sns.countplot(Y_train)
plt.title('Distribution of digits')

for d in digit_count.patches:
    digit_count.annotate('%{:.1f}'.format(d.get_height()), (d.get_x()+0.1, d.get_height()+50))

从 打印值时p.get_x()p.get_height()我得到了正确的值,但它们没有显示在列的顶部

还尝试添加twinx... 也没有帮助:

twin_table = digit_count.twinx()
twin_table.set_yticks(np.arange(0, 110, 10))

它只添加了一个辅助 y 轴(我也不知道如何命名......):

在此处输入图像描述

标签: pythonmatplotlibseaborn

解决方案


图书馆和数据集

import seaborn as sns, numpy as np
df = sns.load_dataset("iris")
 
# Basic countplot
ax = sns.countplot(x="species", y="sepal_length", data=df)

计算每组的 obs 数和中位数以定位标签

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_xticklabels()):
   ax.text(pos[tick], medians[tick] + 0.03, nobs[tick], horizontalalignment='center', size='x-small', color='w', weight='semibold')

sns.plt.show()


推荐阅读