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

如何在Python绘图中用色标高亮滑动窗口(时间序列场景)

实现滑动窗口的色标高亮可视化(单条时间序列)

我来帮你搞定这个滑动窗口高亮的需求,用Python的matplotlib库就能轻松实现。核心思路是先绘制原始时间序列,再为每个滑动窗口对应的时间区间添加半透明的填充色块,用渐变颜色区分不同窗口。

完整代码示例

import numpy as np
import itertools as it
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

# 你提供的滑动窗口生成函数
def moving_window(s, length, step=1):
    streams = it.tee(s, length)
    return zip(*[it.islice(stream, i, None, step*length) for stream, i in zip(streams, it.count(step=step))])

# 生成带极端事件的模拟时间序列(你可以替换成自己的真实数据)
np.random.seed(42)  # 固定随机种子保证可复现
s = np.random.randn(195)
# 手动添加极端事件:20-30区间为高值,80-90区间为低值
s[20:30] += 5
s[80:90] -= 5

# 生成滑动窗口(窗口长度15,和你示例一致)
window_length = 15
x_ = list(moving_window(s, window_length))
x_ = np.asarray(x_)

# 开始绘图
fig, ax = plt.subplots(figsize=(12, 6))

# 绘制原始时间序列曲线
ax.plot(s, color='black', linewidth=1.5, label='原始时间序列')

# 生成渐变颜色映射,用于区分不同窗口
num_windows = len(x_)
cmap = plt.get_cmap('viridis')  # 你可以替换成其他colormap,比如'coolwarm'
norm = mcolors.Normalize(vmin=0, vmax=num_windows-1)

# 遍历每个窗口,添加高亮色块
for idx, window in enumerate(x_):
    # 计算当前窗口的起始和结束索引(根据你的窗口无重叠特性)
    start_idx = idx * window_length
    end_idx = start_idx + window_length - 1
    # 获取对应窗口的颜色
    color = cmap(norm(idx))
    # 填充窗口对应的x区间,半透明避免遮挡曲线
    ax.fill_between([start_idx, end_idx+1], ax.get_ylim()[0], ax.get_ylim()[1], color=color, alpha=0.3)

# 设置图表标签和标题
ax.set_xlabel('时间索引')
ax.set_ylabel('序列值')
ax.set_title('滑动窗口高亮的时间序列')

# 添加颜色条,说明窗口编号与颜色的对应关系
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm, ax=ax, label='窗口编号')

# 添加图例并调整布局
ax.legend()
plt.tight_layout()
plt.show()

关键细节说明

  • 窗口位置计算:你的示例中窗口是无重叠的(步长等于窗口长度),所以每个窗口的起始索引直接用idx * window_length计算。如果你的窗口是有重叠的(比如步长为1),只需要把起始索引改成idx * step即可。
  • 颜色与透明度:使用alpha=0.3让填充色块半透明,既能高亮窗口范围,又不会遮挡原始时间序列的细节。你可以替换viridis为其他colormap(比如coolwarm、rainbow)来改变配色风格。
  • 极端事件适配:代码里模拟了带极端值的时间序列,你只需要把s替换成自己的真实时间序列数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:13:10