基于时间跨度设置pglive实时绘图轴范围:解析roll_on_tick参数
关于pglive中
roll_on_tick参数的含义与设置方案 一、roll_on_tick核心含义
roll_on_tick是pglive控制图表滚动触发逻辑的整数参数,直白来说:每新增指定数量(即roll_on_tick的值)的数据点,图表X轴的显示范围就向前滚动一次。滚动时,X轴起始位置会推进「roll_on_tick个数据点对应的时间长度」,同时自动移除最旧的roll_on_tick个数据点,确保显示点数不超过你设置的max_points。
二、结合你的需求设置方法
你的目标是固定显示时间跨度(如5秒),并按该跨度滚动更新,分两种场景给出精准设置方案:
场景1:跳步式滚动(如0-5s → 5-10s → 10-15s...)
这完全匹配你提到的“依次显示固定时间窗口”需求,步骤如下:
- 单位统一:将Bin宽度B(µs)转换为秒:
B_sec = B * 1e-6 - 计算窗口总点数:时间跨度T(秒)内的总数据点数:
max_points = int(T / B_sec) - 设置
roll_on_tick:直接赋值为max_points
示例验证:若T=5秒,B=1000µs(1ms),则max_points=5/0.001=5000,roll_on_tick=5000。每当新增5000个数据点(对应5秒时长),图表自动滚动到下一个5秒区间。
场景2:平滑滚动(窗口始终保持T秒,新数据实时进入)
若需要窗口实时跟随最新数据,始终显示最近T秒的内容,步骤如下:
- 计算每秒产生的数据点数:
points_per_sec = 1e6 / B(B为µs单位) - 计算每次更新新增点数:结合更新频率F(Hz),
new_points_per_update = int(points_per_sec / F) - 设置参数:
roll_on_tick = new_points_per_updatemax_points = int(T / (B * 1e-6))(保证窗口总时长为T秒)
这样每次GUI更新时,图表会滚动对应点数的时间,始终维持T秒的显示范围。
三、关键注意事项
roll_on_tick和max_points必须为整数,计算后需用int()取整(或根据精度需求四舍五入)- 必须保证
max_points >= roll_on_tick,否则会出现显示异常(滚动点数不能超过窗口总点数) - 若参数动态调整(如用户修改Bin宽度或时间跨度),需实时重新计算上述两个参数并更新图表配置
内容的提问来源于stack exchange,提问作者Aurora
相关产品推荐
相关产品推荐

