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

如何在Matplotlib中设置标注与水平条形图的间距?

解决Matplotlib条形图标注与条形重叠的问题

我明白你遇到的困扰——标注的数字和条形图挤在一起了,其实问题出在你设置标注位置时的水平偏移量太小啦!

你代码里的plt.text(i.get_width() + 0.3, ...)中的+0.3对于你的销售数据(都是几千的量级)来说几乎可以忽略不计,这才导致标注死死贴在条形图上。咱们只需要把这个偏移量调整成一个符合数据规模的数值就行,比如改成+50(你可以根据实际数据大小灵活微调)。

另外,垂直方向的位置可以用i.get_height()/2来更精准地居中,比固定加0.5更适配不同的条形高度。

下面是修改后的完整代码:

from matplotlib import pyplot as plt
manufacturer = ['Yamaha', 'TVS', 'Bajaj', 'Hero']
sales = [2000, 1780, 1500, 3000]
fig, ax = plt.subplots(figsize=(16, 10))
ax.barh(manufacturer, sales, color='orange', edgecolor='blue')
for s in ['top', 'bottom', 'left', 'right']:
    ax.spines[s].set_visible(False)
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')
ax.xaxis.set_tick_params(pad=5)
ax.yaxis.set_tick_params(pad=10)
ax.grid(b=True, color='grey', linestyle='-.', linewidth=0.5, alpha=0.2)
ax.invert_yaxis()
# 修改标注的位置计算逻辑
for i in ax.patches:
    # 水平方向:条形宽度 + 合适的偏移量(这里用50,可根据数据量级调整)
    x_pos = i.get_width() + 50
    # 垂直方向:条形的y起始位置 + 条形高度的一半,实现精准垂直居中
    y_pos = i.get_y() + i.get_height() / 2
    plt.text(x_pos, y_pos, str(round((i.get_width()), 2)), 
             fontsize=10, fontweight='bold', color='grey')
ax.set_title("Demo")
plt.ylabel("Manufacturer")
plt.xlabel("Sales in k")
plt.show()

关键修改点说明:

  • 水平偏移从+0.3改成+50,让标注和条形图拉开足够清晰的距离,如果你的数据量级更大(比如上万),可以继续增大这个数值
  • 垂直位置用i.get_y() + i.get_height()/2,确保标注始终在条形的垂直中心,比固定值更适配不同场景的条形高度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:22:40