我有两个来自二进制列数据的重叠条形图。 我需要将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()
在documentation中,我发现:
for p in ax.patches:
ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
但是我不明白在我的情况下这将如何循环通过各个条。 复制粘贴显然没有用。具有“ for循环”的代码已执行,没有错误消息,但仍然显示了相同的图,但没有标签...
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()
答案 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()
输出:
稍微玩get_width
来对齐标签。