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

如何用Matplotlib绘制起止点均为负数的垂直条形图?

解决plt.bar绘制自定义起止点(负数区间)垂直条形的问题

嘿,我懂你的困扰——plt.bar默认是从0开始绘制条形的,所以直接传入负数列表,它会画出从0到对应负数的条,完全不是你想要的从-97到-27的区间。不用背景覆盖这种取巧的方法,用plt.bar的bottom参数就能优雅解决!

核心思路

plt.bar的bottom参数可以指定条形的底部起始位置,而height参数是条形的高度(必须为正数,因为高度是长度)。对于你的需求:

  • 条形的底部位置设为起始值-97
  • 条形的高度设为结束值 - 起始值(即-27 - (-97) = 70,正数)

这样matplotlib就会从bottom指定的位置向上绘制对应高度的条形,正好覆盖你要的区间。

修改后的示例代码

import matplotlib.pyplot as plt

x = 1
start_y = -97  # 条形的起始点
end_y = -27    # 条形的结束点

plt.subplot(111, frameon=False)
plt.ylim(-280, 1)
# 关键:设置bottom为起始y值,height为结束与起始的差值
plt.bar(x, end_y - start_y, bottom=start_y, width=0.1)

plt.show()

扩展:多个不同起止点的条形

如果要绘制多个起止点不同的负数区间条形,只需要循环处理每个条形的bottom和height即可:

import matplotlib.pyplot as plt

x_vals = [1, 2, 3]
start_ys = [-97, -150, -200]
end_ys = [-27, -80, -120]

plt.subplot(111, frameon=False)
plt.ylim(-280, 1)

# 循环绘制每个条形
for x, start, end in zip(x_vals, start_ys, end_ys):
    plt.bar(x, end - start, bottom=start, width=0.1)

plt.show()

这个方法完全符合你的需求,不需要额外的图层覆盖,是matplotlib原生支持的优雅解决方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:53:14