如何在两个重叠的条形图中添加标签以显示pandas中的value_counts

时间:2019-07-05 12:05:51

标签: python pandas plot label

我有两个来自二进制列数据的重叠条形图。 我需要将value_counts数字作为标签添加到绘图的每个条形图中。

df = pd.DataFrame({'y_pred': y_pred, 'y_test': y_test})
df.y_test.value_counts().plot(kind='bar')
df.y_pred.value_counts().plot(kind='bar', width=0.3, color='r')
plt.legend()
plt.show()

bar plot

documentation中,我发现:

for p in ax.patches:
        ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))

但是我不明白在我的情况下这将如何循环通过各个条。 复制粘贴显然没有用。具有“ for循环”的代码已执行,没有错误消息,但仍然显示了相同的图,但没有标签...

plot

df = pd.DataFrame({'y_pred': y_pred, 'y_test': y_test})
df.y_test.value_counts().plot(kind='bar')
df.y_pred.value_counts().plot(kind='bar', width=0.3, color='r')
for p in ax.patches:
    ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))

plt.legend()

plt.show()

1 个答案:

答案 0 :(得分:0)

您需要将ax传递到plot命令中:

fig, ax = plt.subplots()
df.y_test.value_counts().plot(kind='bar', ax=ax)
df.y_pred.value_counts().plot(kind='bar', width=0.3, color='r', ax=ax)
for p in ax.patches:
    ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))

plt.legend()

plt.show()

输出:

enter image description here

稍微玩get_width来对齐标签。