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

如何用单个滑块实现多图共享可滚动X轴(不同采样频率)

实现多采样频率时序图的同步滑块滚动X轴

我完全懂你想要的效果——几个不同采样频率的时序图表共用一个时间轴,通过单个滑块就能同步左右滚动X轴,查看固定时长的时间窗口内容。咱们直接上代码和思路,一步步实现:

第一步:准备模拟数据

首先得生成符合你需求的测试数据:y1每秒采样、y2每10秒、y3每100秒,总时间窗口设为1000秒(你可以根据实际需求调整):

import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact

# 生成时间轴数据
total_time = 1000  # 总时长1000秒
x1 = np.arange(0, total_time, 1)  # 每秒采样的时间点
x2 = np.arange(0, total_time, 10) # 每10秒采样的时间点
x3 = np.arange(0, total_time, 100)# 每100秒采样的时间点

# 生成对应的y值(模拟随机数据,你可以替换成自己的真实数据)
y1 = np.random.randn(len(x1)).cumsum()  # 累积随机数模拟时序数据
y2 = np.random.randn(len(x2)).cumsum()
y3 = np.random.randn(len(x3)).cumsum()

第二步:创建同步滚动的交互图表

核心思路是:创建3个子图共享X轴,然后用滑块控制X轴的显示起始时间,固定显示窗口的长度(比如100秒,你也可以改成其他值),每次滑块变动时更新所有子图的X轴范围:

%matplotlib inline

# 创建3个子图,共享X轴
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 8), sharex=True)

# 初始绘制所有数据
line1, = ax1.plot(x1, y1, label='y1 (1s采样)')
line2, = ax2.plot(x2, y2, label='y2 (10s采样)', color='orange')
line3, = ax3.plot(x3, y3, label='y3 (100s采样)', color='green')

# 设置每个子图的标签和标题
ax1.set_title('多采样频率时序图同步滚动')
ax1.set_ylabel('y1数值')
ax2.set_ylabel('y2数值')
ax3.set_ylabel('y3数值')
ax3.set_xlabel('时间(秒)')
for ax in [ax1, ax2, ax3]:
    ax.legend()

# 定义滑块控制的更新函数
def update_x_window(start_time):
    window_duration = 100  # 固定显示100秒的窗口
    # 设置所有子图的X轴范围
    ax1.set_xlim(start_time, start_time + window_duration)
    ax2.set_xlim(start_time, start_time + window_duration)
    ax3.set_xlim(start_time, start_time + window_duration)
    # 自动调整Y轴范围以适配当前窗口内的数据
    ax1.relim()
    ax1.autoscale_view(scalex=False, scaley=True)
    ax2.relim()
    ax2.autoscale_view(scalex=False, scaley=True)
    ax3.relim()
    ax3.autoscale_view(scalex=False, scaley=True)

# 创建滑块:起始时间范围从0到总时长-窗口时长,步长1秒
interact(update_x_window, start_time=(0, total_time - 100, 1))

关键细节说明

  • 共享X轴:用sharex=True创建子图,确保所有图表的X轴始终对齐,滚动时不会错位。
  • 自适应Y轴:每次滚动时调用relim()和autoscale_view(),让每个子图的Y轴自动适配当前窗口内的数据,避免出现数据被截断的情况。
  • 滑块范围:滑块的最大值设为total_time - window_duration,这样滚动到最右端时刚好显示最后一个完整的时间窗口。
  • 不同采样频率处理:因为所有数据的X轴都是统一的时间刻度,只要设置好X轴范围,matplotlib会自动筛选并显示对应时间窗口内的采样点,不用额外处理不同频率的数据对齐问题。

你可以把模拟数据替换成自己的真实数据,调整total_time和window_duration来匹配你的需求,滑块的步长也可以根据需要修改(比如改成10秒,让滚动更平缓)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:11