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的解析,且第二个文件的时间缺少日期,无法和第一个文件的时间轴对齐。修改思路如下:
- 全局
timefmt统一使用带日期的格式,确保xrange能匹配第一个文件的时间范围 - 给第二个文件的时间补全日期前缀,让它的时间点映射到和第一个文件相同的日期区间
- 保留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
相关产品推荐
相关产品推荐

