求助:如何为pandas生成的柱状图添加精确数值标注?
解决柱状图顶部显示精确数值的问题
嘿,我懂你这种明明画了柱状图却看不到关键数值的困扰!别担心,这是pandas默认绘图的一个小缺口,咱们只需要在现有代码基础上添加几行标注逻辑就能搞定。
完整解决方案代码
# 你的原始绘图代码 ax = sos_df['Status'].value_counts().plot(kind='bar', figsize=(10,7), color="coral", fontsize=13) # 核心:遍历每个柱子,添加数值标注 for patch in ax.patches: # 获取当前柱子的高度(对应统计的数值) bar_height = patch.get_height() # 在柱子顶部居中位置添加文本 ax.text( patch.get_x() + patch.get_width() / 2, # 文本的x坐标:柱子中心位置 bar_height, # 文本的y坐标:柱子顶部 f'{int(bar_height)}', # 显示的数值(如果是小数可以用round(bar_height, 2)保留两位) ha='center', # 水平居中对齐 va='bottom', # 垂直对齐在柱子顶部,避免重叠 fontsize=12, color='darkslategray' # 可选:设置文本颜色,和柱子区分开 ) # 可选:优化图表样式(按需调整) ax.set_title('Status 分类统计', fontsize=15) ax.set_xlabel('状态类型', fontsize=14) ax.set_ylabel('数量', fontsize=14) # 显示图表 plt.show()
关键代码解释
ax.patches:获取图表中所有的柱子对象,每个柱子都是一个Patch实例patch.get_x()+patch.get_width()/2:计算柱子的中心x坐标,确保文本居中显示ha='center'&va='bottom':分别控制文本的水平居中、垂直对齐在柱子顶部,避免和柱子或其他元素重叠- 如果你的数值是小数,把
int(bar_height)改成round(bar_height, 2)就能保留两位小数显示
这样修改后,每个柱子的顶部就会清晰显示对应的精确数值啦!如果需要调整文本的大小、颜色或者位置,直接修改ax.text里的参数就行。
内容的提问来源于stack exchange,提问作者Varun Dahasahasra
相关产品推荐
相关产品推荐

