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

如何在Python中绘制带垂直区间填充的散点时序图?

解决方案:带垂直区间填充的散点时序图

针对你的需求,这里给出完全符合要求的Matplotlib实现方案,直接看代码和关键说明:

import matplotlib.pyplot as plt

# 示例数据
time = [1, 2, 3, 7, 8, 9, 10]
data = [5, 6, 5, 5, 6, 7, 8]
lower_limit = [4, 4, 5, 5, 5, 5, 5]
upper_limit = [6, 6, 6, 7, 7, 7, 7]

# 创建画布和轴
fig, ax = plt.subplots(figsize=(10, 6))

# 遍历每个时间点,绘制垂直填充区域和上下限散点
x_pad = 0.1  # 控制垂直填充的宽度,可根据时间刻度调整
for t, low, high in zip(time, lower_limit, upper_limit):
    # 绘制上下限之间的垂直绿色填充
    ax.fill_betweenx([low, high], t - x_pad, t + x_pad, color='limegreen', alpha=0.3)
    # 绘制下限散点
    ax.scatter(t, low, marker='v', color='gray', zorder=3)
    # 绘制上限散点
    ax.scatter(t, high, marker='^', color='gray', zorder=3)

# 处理数据点颜色:超出范围的设为红色,否则蓝色
data_colors = ['red' if d < low or d > high else 'blue' for d, low, high in zip(data, lower_limit, upper_limit)]
# 绘制数据散点
ax.scatter(time, data, marker='o', color=data_colors, zorder=4)

# 调整坐标轴和标签
ax.set_xlabel('时间')
ax.set_ylabel('传感器数值')
ax.set_title('传感器数据时序散点图(带上下限区间)')
ax.grid(True, alpha=0.2)

plt.tight_layout()
plt.show()

关键实现说明

  • 垂直区间填充:放弃fill_between改用fill_betweenx,对每个时间点单独绘制一个窄范围的垂直填充块(通过x_pad控制宽度),完全避免时间间隙被填充的问题,同时精准对应每个时间点的上下限。
  • 数据点颜色区分:通过列表推导式批量生成颜色列表,一次性传入scatter函数,效率远高于循环绘制单个点,适合数千条数据的场景。
  • 层级控制:用zorder参数确保数据点在最上层(zorder=4),上下限散点次之(zorder=3),填充区域在底层,避免遮挡。
  • 性能适配:遍历数千个时间点的开销极小,Matplotlib完全能轻松处理24小时级别的数据量,若时间是datetime类型,只需把x_pad换成对应的时间增量(比如timedelta(minutes=1))即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:15:41