Gnuplot 5.4年月时间轴绘图数据点缺失、xtics刻度显示异常
Gnuplot 5.4 时间序列绘图异常修正
问题根因
两个异常均来自配置错误:
- 数据点丢失问题:
set datafile columnheaders配置默认对每个数据块(对应index值)生效,会自动跳过每个块的第一行作为列头。你的测试文件只有全局第一行是列头,后续3个数据块的第一行都是有效数据,因此被误判为列头跳过:- index 1(Area 11)、index 2(Area 12)被跳过的第一行刚好是2022-04的数据,因此出现初始点丢失
- index 3(Area 13)被跳过的第一行是2022-03的数据,刚好被
xrange ['2022-04':*]裁剪,表面上看起来正常,实际也丢失了数据点
- X轴刻度显示异常:手动指定刻度的语法错误:一是自定义刻度列表没有用括号包裹,二是
'2022-05'和'2022-06'之间缺失逗号,导致Gnuplot无法正确解析指定的刻度位置,仅生成了错误的单一刻度。
修正后的可直接运行脚本
由于plot命令中已经手动指定了每个序列的标题,且使用列号引用字段,完全不需要全局开启columnheaders,只需要在读取第一个数据块时跳过第一行的全局表头即可:
set datafile separator comma set timefmt '%Y-%m' set xdata time set format x '%Y-%m' set xlabel 'Job completion Date' set ylabel 'Median completion time' set xrange ['2022-04':*] # 修正xtics语法:自定义刻度用括号包裹,补全缺失的逗号 set xtics ('2022-04', '2022-05', '2022-06', '2022-07') # 第一个数据块(index 0)用every ::1跳过第一行的全局表头,其余块正常读取 plot "./test.csv" index 0 using 1:5 every ::1 title "Area 10" with lines lc 1, \ '' index 1 using 1:5 title "Area 11" with lines lc 2, \ '' index 2 using 1:5 title "Area 12" with lines lc 3, \ '' index 3 using 1:5 title "Area 13" with lines lc 4
如果需要保留用列名引用字段的能力,也可以不删除
set datafile columnheaders,但需要修改test.csv文件,给每个数据块的第一行都加上和全局表头一致的列头行,让每个块被跳过的首行确实是表头而非数据。
%Y-%m-%d 日期格式适配
对于使用完整年月日格式的同类脚本,其余修正逻辑完全一致,只需要调整时间相关配置即可:
- 将时间解析格式改为
set timefmt '%Y-%m-%d' - 根据需要调整X轴显示格式,比如要显示完整日期就用
set format x '%Y-%m-%d',仅显示年月保留%Y-%m即可 - 所有
xrange、xtics中用到的时间字符串必须符合timefmt格式,例如原来的'2022-04'要替换为'2022-04-01'这类带日期的字符串。
内容的提问来源于stack exchange,提问作者Steve Gooberman-Hill
相关产品推荐
相关产品推荐

