can sns.countplot()能否在绘制的条形图上显示数字?

时间:2018-05-22 13:24:25

标签: python matplotlib seaborn

我正在使用MNIST数据集并使用sns.countplot()绘制火车图像,这给出了enter image description here

有没有办法在某处添加条形图的值?在每一个上面?在里面/下面?目前,我正在使用print查看实际值,并且会干扰sns.countplot(),因为这些图总是在打印之前输出

我使用了与this非常相似的代码,但我仍然没有注释。

# 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轴(我也不知道如何命名......):

enter image description here

1 个答案:

答案 0 :(得分:0)

图书馆和数据集

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