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

Matplotlib水平条形图:实现标签超出Y轴时自动裁剪

解决Matplotlib水平条形图标签超出Y轴时的裁剪问题

我绘制了一个水平条形图,希望在条形内部添加标签,但当标签超出Y轴时需要被裁剪。我的代码如下:

import matplotlib.pyplot as plt

labels = ['Book 1', 'Book 2', 'Book 3']
values = [20, 35, 5]

fig, ax = plt.subplots()

y_pos = range(len(labels))
ax.barh(y_pos, values, align='center', color='blue')
for i, v in enumerate(values):
    ax.text(v, i, "TESTSTETSTSTS", color='grey', va='center', ha='right')

ax.set_yticks(y_pos)
ax.set_yticklabels(labels)
ax.invert_yaxis()
ax.set_xlabel('Number')
ax.set_title('Number of sold books')

plt.show()

当前问题:标签超出Y轴左侧边界时完整显示,未被裁剪;期望效果:标签超出条形图区域(Y轴左侧)的部分被自动裁剪,仅保留条形内部可见的内容。


解决方法

核心是给文本添加裁剪属性,修改后的代码如下:

import matplotlib.pyplot as plt

labels = ['Book 1', 'Book 2', 'Book 3']
values = [20, 35, 5]

fig, ax = plt.subplots()

y_pos = range(len(labels))
ax.barh(y_pos, values, align='center', color='blue')
for i, v in enumerate(values):
    # 启用裁剪,超出坐标轴范围的文本会被自动裁剪
    ax.text(v, i, "TESTSTETSTSTS", color='grey', va='center', ha='right', clip_on=True)

ax.set_yticks(y_pos)
ax.set_yticklabels(labels)
ax.invert_yaxis()
ax.set_xlabel('Number')
ax.set_title('Number of sold books')

plt.show()

关键修改说明:

  • 添加clip_on=True参数:开启文本的裁剪功能,Matplotlib会自动将超出当前坐标轴显示范围的文本部分裁剪掉
  • 无需额外指定裁剪区域,默认裁剪范围就是当前坐标轴的边界,刚好满足标签超出Y轴左侧时被裁剪的需求

如果需要更精确的裁剪控制,也可以通过clip_box参数指定自定义裁剪区域,比如仅限制在条形内部,但对于当前需求,clip_on=True已经足够解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:15:57