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

Python matplotlib如何绘制同时指定底部与顶部值的垂直柱状图

实现方法

完全可以绘制这类自定义每个柱体上下限的柱状图,这类图也常被称为范围柱状图/浮动柱状图,直接使用matplotlib的bar接口即可实现,核心是利用接口的bottom参数单独指定每个柱的起始基线。

针对你给出的DataFrame示例,实现逻辑如下:

  • 柱体的实际绘制高度为对应行的SYS(顶部值)减去DIA(底部值)
  • 将bottom参数传入DIA列的数值,指定每个柱的起始位置
  • X轴刻度直接对应Seconds字段的取值定位柱体位置

完整可运行代码:

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据
data={'Seconds':[10,20,30,40],'SYS':[95,103,99,112],'DIA':[56,75,62,70]}
df = pd.DataFrame(data)

# 计算每个柱的绘制高度
bar_height = df['SYS'] - df['DIA']

# 绘制浮动柱状图
plt.figure(figsize=(8, 5))
plt.bar(
    x=df['Seconds'],
    height=bar_height,
    bottom=df['DIA'],
    width=5, # 可根据展示需求调整柱宽
    color='#4c72b0',
    edgecolor='black'
)

# 基础图表配置
plt.xlabel('Seconds')
plt.ylabel('Value')
plt.title('Custom Baseline Bar Chart')
plt.xticks(df['Seconds']) # 强制X轴展示所有Seconds取值
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.show()

如果需要给每个柱标注上下限数值,可以在plt.show()前追加如下代码:

# 标注每个柱的底部DIA、顶部SYS值
for x, dia, sys in zip(df['Seconds'], df['DIA'], df['SYS']):
    plt.text(x, dia-2, f'{dia}', ha='center', fontsize=10)
    plt.text(x, sys+2, f'{sys}', ha='center', fontsize=10)

补充:如果使用pandas自带的绘图接口,同样支持传入bottom参数,写法为df.plot.bar(x='Seconds', y=bar_height, bottom=df['DIA']),实现效果和matplotlib原生接口一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:09:20