如何在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
相关产品推荐
相关产品推荐

