如何在Bokeh中对齐不同采样周期的两条信号曲线?
解决两个不同采样周期信号的时间对齐问题
核心方案是放弃datetime类型,直接用数值型的物理时间作为X轴(以秒为单位的浮点数),这样既能保证飞秒级的精度,又能让两个信号在时间维度上准确对齐。
步骤说明
- 统一时间单位:将飞秒、纳秒转换为国际单位制的秒
- 数据集
a的采样周期:416飞秒 = 416e-15 秒 - 数据集
b的采样周期:25纳秒 = 25e-9 秒
- 数据集
- 为每个数据点生成对应的绝对时间(默认两个信号从同一时刻开始采集,若起始时间不同,给其中一个时间轴添加对应偏移量即可)
- 用计算出的时间轴替代原索引作为X轴绘图
完整代码示例
from bokeh.plotting import figure, show import numpy as np # 原始数据集 a = [0,1,2,5,4,3,1] b = [9,2,1,3,6,8,5] # 采样周期(转换为秒) sampling_a = 416e-15 # 416飞秒 sampling_b = 25e-9 # 25纳秒 # 生成时间轴数组 time_a = np.arange(len(a)) * sampling_a time_b = np.arange(len(b)) * sampling_b # 创建图表 p = figure(plot_width=800, plot_height=400, x_axis_label="时间(秒)", y_axis_label="信号值") # 绘制两个信号 p.line(time_a, a, line_color="blue", legend_label="信号a(416fs采样)") p.line(time_b, b, line_color="red", legend_label="信号b(25ns采样)") # 优化X轴显示(启用科学计数法提升可读性) p.xaxis.formatter.use_scientific = True show(p)
注意事项
- 时间跨度差异处理:信号
a的总时长仅约6*416e-15 ≈ 2.5e-12秒,而信号b的总时长是6*25e-9 = 1.5e-7秒,直接绘图时a的信号会集中在X轴最左端,可通过Bokeh的框选缩放工具放大左端区域查看细节。 - 起始时间偏移调整:如果两个信号不同时触发,只需在其中一个时间轴上加上对应偏移量(比如信号
b比a晚触发1e-10秒,则time_b = np.arange(len(b)) * sampling_b + 1e-10)。 - 无numpy替代方案:不想用numpy的话,可用列表推导生成时间轴:
time_a = [i * sampling_a for i in range(len(a))] time_b = [i * sampling_b for i in range(len(b))]
内容的提问来源于stack exchange,提问作者Trick
相关产品推荐
相关产品推荐

