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

如何为多行Y轴数据复用单个X轴时间戳制作Gnuplot滚动图?

动态Gnuplot滚动图:为多行Y值复用单个时间戳X轴值

数据文件格式

2024-11-11 11:08:39
[1]123,45,67,89,0,0,0
[2]11,22,33,44,0,0,0
[5]99,88,77,66,0,0,0

2024-11-11 11:08:40
[1]123,45,67,89,0,0,0
[2]55,66,77,88,0,0,0
[5]99,88,77,66,0,0,0

该数据文件每秒会追加一个上述格式的数据块。我需要制作动态滚动Gnuplot图,以每个数据块首行的时间戳作为X轴值,绘制[2]行的第3个参数(比如第一块中是33,第二块中是77)。请问如何让后续行的Y轴值复用对应数据块的单个X轴时间戳?


解决方法

核心思路是在Gnuplot里用变量缓存当前数据块的时间戳,遇到目标行([2]行)时,取出缓存的时间戳作为X值,提取对应Y值绘图。

1. 配置时间戳解析

先让Gnuplot能正确识别你的时间格式:

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M:%S"  # 可根据需求调整X轴显示格式

2. 编写数据处理与绘图脚本

用变量缓存时间戳,结合条件判断提取目标数据:

# 初始化时间戳缓存变量
current_time = ""

# 绘图逻辑:只处理目标行,复用对应时间戳
plot "data.txt" using ( \
    # 识别时间戳行(无[]开头),缓存时间戳,返回NaN不绘图
    strcol(1) !~ /^\[/ ? (current_time = strcol(1), NaN) : \
    # 识别[2]行,用缓存的时间戳做X轴,提取第3个参数做Y轴
    strcol(1) =~ /^\[2\]/ ? (timecolumn(current_time, "%Y-%m-%d %H:%M:%S"), \
                            real(word(substr(strcol(1), 4), 3, ",")) \
                          ) : NaN \
) with linespoints title "[2]第3个参数"

3. 实现动态滚动效果

添加循环刷新和滚动窗口配置,实现每秒更新的滚动图:

set terminal x11 persist  # 保持绘图窗口不关闭
set autoscale y  # 自动适配Y轴范围
set xrange [time(0)-60:*]  # 显示最近60秒的数据,形成滚动窗口
set grid  # 显示网格线

# 循环刷新数据,每秒更新一次
while (1) {
    replot
    pause 1
}

关键逻辑说明

  • 遇到无[]开头的行时,把该行内容存到current_time变量里,返回NaN让该行不参与绘图
  • 遇到[2]开头的行时,用timecolumn把缓存的时间戳转成Gnuplot能处理的时间值作为X轴;同时用substr去掉[2]前缀,再用word按逗号分割提取第3个参数作为Y轴
  • 其他行返回NaN,不显示在图上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:48:15