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

gnuplot读取文本文件日期时间绘图报空x范围错误求助

gnuplot绘制时间序列数据报空x范围错误修复

问题复现

使用的CSV数据文件data-nohead.txt内容如下:

03.07.2022,13:40:18,119.5,119.5,119.5,17.5,60.00,100.0,27.27,35.1,
03.07.2022,13:30:18,119.5,119.5,119.5,17.5,60.00,100.0,27.27,35.5,
03.07.2022,13:20:18,119.5,119.5,119.5,17.5,60.00,100.0,27.27,35.5,

原绘图脚本核心代码:

set timefmt "%d.%m.%Y,%H:%M:%S"
plot 'data-nohead.txt' using ($1):2

运行后抛出报错:

"./plot_voltage.gp" line 35: Can't plot with an empty x range!

错误原因

  • 未启用时间轴模式:set timefmt仅定义时间字符串的解析规则,不会自动开启坐标轴的时间类型支持,缺少set xdata time配置时,gnuplot会默认将x轴输入解析为普通数值,无法识别时间格式字符串。
  • 列引用语法错误:($1)是对第一列做数值计算的语法,字符串类型的日期被强制转换为数值时会得到无效空值;同时日期、时间分属逗号分隔的前两列,单独引用第一列无法获取完整时间戳。
  • 未指定数据分隔符:数据为逗号分隔格式,gnuplot默认按空白字符拆分列,会导致字段识别完全错乱,无法正确提取时间和绘图用的数值列。

修复方案

替换为以下可正常运行的脚本代码,可根据实际需求调整y轴对应的列号:

# 指定逗号为数据列分隔符,适配CSV格式
set datafile separator comma
# 声明x轴为时间类型
set xdata time
# 配置时间字符串解析规则,匹配"日.月.年,时:分:秒"格式
set timefmt "%d.%m.%Y,%H:%M:%S"
# 配置x轴刻度的显示格式,示例为"月-日 时:分",可按需修改
set format x "%m-%d %H:%M"
# 拼接前两列的日期、时间为完整时间戳,示例取第3列电压值作为y轴,可替换为目标列号
plot 'data-nohead.txt' using (strcol(1).",".strcol(2)):3 with linespoints

关键注意事项

  • 引用字符串类型的时间列时,不要用$()包裹列号,该语法仅适用于数值运算场景,会破坏时间字符串的解析逻辑。
  • 只要使用时间格式解析,必须显式通过set xdata time/set ydata time声明对应坐标轴的时间类型,否则timefmt配置不会生效。
  • 非空白分隔的数据集必须提前通过set datafile separator指定分隔符,否则列拆分逻辑不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:03:12