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

Gnuplot不同时间格式CSV文件同图绘制问题求助

解决Gnuplot中两种时间格式CSV文件同图绘制问题

我用两个CSV文件绘图,第一个文件时间格式是%Y-%m-%d %H:%M:%S,第二个是%H:%M:%S。现在没法同时显示两个图表:设置全局timefmt/xrange为"%Y-%m-%d %H:%M:%S"时只能显示第一个图,设为"%H:%M:%S"时只能显示第二个图。

文件内容示例

文件1(xxx.CSV)

1;2022-11-24 17:21:34;0;+3.311;+0.004;+0.003;+0.001;+0.000;+0.000;+0.000;+0.000;+0.001;-0.001;+0.001;+0.000;-0.001;+0.000;-0.001;+0.000;+0.000;-0.001;+0.002;-0.001;LLLLLLLLLL;LLLLLLLLLL;LLLLLLLLL
2;2022-11-24 17:21:34;200;+3.311;+0.007;+0.002;+0.001;-0.001;+0.000;+0.000;-0.001;+0.001;-0.001;+0.001;+0.000;-0.002;+0.001;-0.001;+0.000;+0.001;-0.001;+0.001;-0.001;LLLLLLLLLL;LLLLLLLLLL;LLLLLLLLL
...

文件2(yyy.csv)

17:22:28;3.446;1.398;0.007;4.817508;0.025
17:22:29;3.447;1.398;0.008;4.818906;0.027
17:22:30;3.448;1.398;0.008;4.820303999999999;0.029
...

我当前的代码

set grid
set datafile separator ";"
set title 'xxx'
set title font ",12"
set ylabel 'U/V' font ",12"
#set format x "%H:%M:%S"
set key box font ",12"
#myformat = "%Y-%m-%d %H:%M:%S"
#set key at strptime(myformat,"2022-11-24 18:02:55"), 3.005
set xtics time
set xlabel 'time' font ",12"
set yrange [3:3.7]
set ytics font ",10"
set y2tics font ",10"
set border 11
set border lw 2
set xtics font ",8"
set tics nomirror
set term wxt size 1200, 460
set xdata time
#set timefmt "%Y-%m-%d %H:%M:%S"
set timefmt "%H:%M:%S"
#set xrange ["2022-11-24 17:22:00":"2022-11-24 18:47:00"]
set xrange ["17:20:00":"18:47:00"]

plot'xxx.CSV' using (timecolumn(2, "%Y-%m-%d %H:%M:%S")):4 every ::43::25741 title "aaa" lt 7 lc 7 with lines, \
'yyy.csv' using (timecolumn(1, "%H:%M:%S")):2 title "bbb" lt 3 lc 6 with lines

解决方案

核心问题是全局timefmt会影响xrange的解析,且第二个文件的时间缺少日期,无法和第一个文件的时间轴对齐。修改思路如下:

  1. 全局timefmt统一使用带日期的格式,确保xrange能匹配第一个文件的时间范围
  2. 给第二个文件的时间补全日期前缀,让它的时间点映射到和第一个文件相同的日期区间
  3. 保留x轴显示为时分秒,保证图表简洁

修改后的完整代码

set grid
set datafile separator ";"
set title 'xxx'
set title font ",12"
set ylabel 'U/V' font ",12"
set format x "%H:%M:%S"  # x轴仅显示时分秒,避免重复日期
set key box font ",12"
set xtics time
set xlabel 'time' font ",12"
set yrange [3:3.7]
set ytics font ",10"
set y2tics font ",10"
set border 11
set border lw 2
set xtics font ",8"
set tics nomirror
set term wxt size 1200, 460
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"  # 全局用带日期的时间格式
set xrange ["2022-11-24 17:22:00":"2022-11-24 18:47:00"]  # 对齐第一个文件的日期范围

# 第一个文件直接解析完整时间;第二个文件拼接日期后解析
plot 'xxx.CSV' using (timecolumn(2, "%Y-%m-%d %H:%M:%S")):4 every ::43::25741 title "aaa" lt 7 lc 7 with lines, \
     'yyy.csv' using (timecolumn(0, "%Y-%m-%d %H:%M:%S", "2022-11-24 " . strcol(1))):2 title "bbb" lt 3 lc 6 with lines

关键说明

  • timecolumn(0, fmt, custom_str):Gnuplot允许直接传入拼接好的时间字符串进行解析,无需依赖列的原始格式
  • 全局timefmt和xrange统一使用带日期的格式,确保两个文件的时间点都落在同一个时间轴上
  • set format x "%H:%M:%S":让x轴显示更简洁,只展示时分秒信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:20:34