You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Matplotlib分组柱状图的标签重叠问题?

解决分组柱状图标签重叠问题

我用Python绘制分组柱状图对比不平衡与平衡数据的模型性能,但柱状图上方的数值标签出现重叠,调整padding或缩小字体效果不佳(字体需调至极小才不重叠,可读性差)。以下是无需缩小字体即可解决重叠的几种方法:

方法1:垂直旋转标签

给bar_label添加rotation参数,将标签垂直显示,避免横向重叠:

# 修改bar_label部分代码
ax.bar_label(rects1, padding=5, fmt='%.2f', label_type='edge', rotation=90)
ax.bar_label(rects2, padding=5, fmt='%.2f', label_type='edge', rotation=90)
ax.bar_label(rects3, padding=5, fmt='%.2f', label_type='edge', rotation=90)

如果90度旋转后仍有问题,可尝试rotation=45斜向显示,同时微调padding值。

方法2:将标签放在柱子内部

把数值标签移到柱子顶部内侧,既避免外部重叠,还能保持字体大小:

ax.bar_label(rects1, padding=-15, fmt='%.2f', label_type='center', color='white')
ax.bar_label(rects2, padding=-15, fmt='%.2f', label_type='center', color='white')
ax.bar_label(rects3, padding=-15, fmt='%.2f', label_type='center', color='white')
  • padding=-15控制标签在柱子内的位置(负数表示向内偏移)
  • color='white'让浅色标签在深色柱子上更清晰,可根据柱子颜色调整

方法3:缩小柱子宽度,增加横向空间

适当减小柱子宽度,给每组的三个柱子留出更多间隙,标签自然不会重叠:

width = 0.18  # 从原来的0.2缩小到0.18
rects1 = ax.bar(x - width, imbalancedResults, width, label='Imbalanced Dataset')
rects2 = ax.bar(x , rusResults, width, label='RandomUnderSampler')
rects3 = ax.bar(x + width, smoteResults, width, label='SMOTE')

同时可微调figsize增大图表宽度,比如fig, ax = plt.subplots(figsize=(12,9)),进一步提升横向空间。

方法4:错开标签高度

手动调整每组标签的垂直位置,让不同柱子的标签上下错开:

# 给每组标签设置不同的垂直偏移
for label in ax.bar_label(rects1, fmt='%.2f', label_type='edge'):
    label.set_y(label.get_position()[1] + 0.02)  # 第一组标签抬高0.02
for label in ax.bar_label(rects2, fmt='%.2f', label_type='edge'):
    label.set_y(label.get_position()[1] + 0.04)  # 第二组抬高0.04
for label in ax.bar_label(rects3, fmt='%.2f', label_type='edge'):
    label.set_y(label.get_position()[1] + 0.06)  # 第三组抬高0.06

偏移量可根据实际数值范围调整,确保标签不重叠且清晰可见。

内容的提问来源于stack exchange,提问作者sums22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:05:30