matplotlib绘制柱状图时如何让柱顶标注文本适配画布不溢出
问题原因
当前柱顶标注显示在画布外,由两个问题导致:
- 标注的y轴坐标直接取柱子高度,没有给旋转90度的文本预留和柱顶的间距,文本从柱顶位置直接向上延伸
- matplotlib默认y轴上限和最高柱顶齐平,没有给顶部标注预留显示空间,超出轴范围的文本会被直接裁切
修复实现
支持自定义标注字号、自定义柱顶与标注的间距,修复后代码如下:
# 按需修改以下两个自定义参数 custom_fontsize = 7 # 标注文本字号 top_gap = 2.5 # 标注与柱顶的间距,数值越大间距越远 # 给所有柱子加顶部标注 for rect in barp1 + barp2 + barp3 + barp4 + barp5 + barp6 + barp7 + barp8: height = rect.get_height() plt.text( rect.get_x() + rect.get_width() / 2.0, height + top_gap, # 叠加间距偏移,避免文本贴在柱顶上 f'{height:.2f}', fontsize=custom_fontsize, ha='center', va='bottom', rotation=90 ) # 调整y轴显示范围,预留足够的顶部空间放标注 all_bar_heights = [r.get_height() for r in barp1 + barp2 + barp3 + barp4 + barp5 + barp6 + barp7 + barp8] y_max = max(all_bar_heights) # 系数1.2可根据标注长度调整,标注越长系数设得越大,直到所有文本完整显示 plt.ylim(bottom=0, top=y_max * 1.2)
调参提示:如果标注旋转后长度较长,把
plt.ylim里的1.2适当调大(比如1.25、1.3)即可;如果觉得标注和柱顶的距离不合适,直接修改top_gap的数值就行。
内容的提问来源于stack exchange,提问作者I_Al-thamary
相关产品推荐
相关产品推荐

