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

Gnuplot 5.4时间格式数据与解析函数叠加绘图问题求助

解决Gnuplot时间轴叠加解析函数的问题

核心问题分析

你的代码报错和功能失效主要来自三个关键点:

  • 时间格式设置与数据实际格式不匹配
  • 直接用字符串进行数值比较的逻辑错误
  • 未结合Gnuplot的时间数值机制完成时间与位置的转换

修正步骤与完整代码示例

1. 匹配数据的时间格式

你的数据时间格式为YYYY-MM-DDTHH:MM:SS.ssssssZ,需对应调整timefmt参数,或者提取有效时间部分进行转换:

set xdata time
# 匹配数据的基础时间格式,忽略末尾的小数和Z标识
set timefmt "%Y-%m-%dT%H:%M:%S"
# 设置横轴显示格式
set format x "%d %b\n%H:%M:%S"
# 设置横轴范围,与数据范围对应
set xrange ["2022-02-16T21:22:28":"2022-02-16T23:46:28"]

2. 将时间字符串转为可计算的数值

使用strptime函数把时间字符串转换为Gnuplot内部的秒级数值,才能进行范围判断和计算:

# 定义函数的有效时间范围字符串
t1_str = "15-Feb-2022 23:30:28"
t2_str = "16-Feb-2022 07:27:28"
# 转换为秒级数值
t1_num = strptime("%d-%b-%Y %H:%M:%S", t1_str)
t2_num = strptime("%d-%b-%Y %H:%M:%S", t2_str)

3. 修正时间与位置的转换逻辑

根据time = x/velocity(x为位置),反推时间轴x(秒)对应的位置值:x_pos = (x - t_offset) * velocity,其中t_offset是偏移量,用于让函数曲线与实测数据对齐。同时添加范围限制:

velocity = 0.000278  # 示例速度值,需根据你的实际数据调整
# 偏移量:用于对齐函数曲线和数据,可根据实际情况修改
t_offset = strptime("%Y-%m-%dT%H:%M:%S", "2022-02-16T21:20:00")

# 定义带范围限制的函数:仅在t1_num到t2_num范围内绘制,否则返回无效值
f_t(x) = (x >= t1_num && x <= t2_num) ? ((x - t_offset) * velocity)**2 : 1/0

4. 处理数据中的异常字符

第一行数据末尾有多余的.,可以用substr截断有效时间部分,确保Gnuplot正确解析:

# 绘制实测数据和函数曲线
plot "data.txt" using (strptime("%Y-%m-%dT%H:%M:%S", substr(stringcolumn(1),1,19))):2 title "实测数据", \
     f_t(x) title "f(x)=x²" with lines

关键调整说明

  • 反复调整velocity和t_offset的数值,直到函数曲线与数据趋势匹配
  • 如果需要保留数据中的小数时间,可将timefmt改为%Y-%m-%dT%H:%M:%S.%6,并对应调整substr的截取长度
  • 1/0用于让函数在指定范围外不绘制,避免生成无效数据点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:58:17