如何在循环中基于索引值高亮显示各时序数据对应片段
问题根源
- 循环遍历过程中没有按当前序号匹配
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
相关产品推荐
相关产品推荐

