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

如何在循环中基于索引值高亮显示各时序数据对应片段

问题根源
  • 循环遍历过程中没有按当前序号匹配indx列表内的对应中心值,直接传入整个列表计算高亮区间,导致两次循环生成的高亮范围全部叠加在第一条时序数据的y轴区间上
  • axhspan的xmin、xmax参数为x轴归一化坐标(取值范围0~1,对应x轴从最左端到最右端的比例),原代码写死固定值0.15、0.4,没有匹配每条时序数据加dist偏移后的实际x位置,因此高亮块不会跟随第二条曲线的偏移位置移动
  • 原代码存在语法错误:data= np.array(data))多写了一个闭合右括号,且缺失numpy导入语句
修正代码
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(7.5, 9.5))
ax1 = fig.add_axes([0.06, 0.4, 0.28, 0.30])
indx = [45, 68]
highlight_half_range = 10  # 高亮y轴区间半宽,对应35-55、58-78的范围
curve_x_half_width = 0.4   # 单条曲线在x轴的展示半宽,可根据数据实际振幅调整

for idx, data in enumerate(data_stream):
    data = np.array(data)
    dist = data.dist
    # 绘制单条时序曲线
    ax1.plot(data + dist, np.arange(len(data)), lw=0.35, color='black')
    # 匹配当前曲线对应的高亮中心索引
    current_center = indx[idx]
    # 将当前曲线的x轴实际坐标转换为axhspan要求的归一化坐标
    x_left = ax1.get_xaxis_transform().transform((dist - curve_x_half_width, 0))[0]
    x_right = ax1.get_xaxis_transform().transform((dist + curve_x_half_width, 0))[0]
    # 绘制当前曲线对应的高亮区间
    ax1.axhspan(
        current_center - highlight_half_range,
        current_center + highlight_half_range,
        xmin=x_left,
        xmax=x_right,
        color='red',
        alpha=0.1
    )
参数调整说明
  • 如果高亮块在x方向过宽/过窄,没有完全覆盖对应曲线,调整curve_x_half_width的数值即可,该值和你单条时序数据的振幅范围对应
  • 如果需要修改高亮的y轴范围,调整highlight_half_range即可,当前值10对应中心值上下各10个索引单位,和你要求的区间长度一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:24:25