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

Gnuplot 5.4年月时间轴绘图数据点缺失、xtics刻度显示异常

Gnuplot 5.4 时间序列绘图异常修正

问题根因

两个异常均来自配置错误:

  1. 数据点丢失问题:set datafile columnheaders配置默认对每个数据块(对应index值)生效,会自动跳过每个块的第一行作为列头。你的测试文件只有全局第一行是列头,后续3个数据块的第一行都是有效数据,因此被误判为列头跳过:
    • index 1(Area 11)、index 2(Area 12)被跳过的第一行刚好是2022-04的数据,因此出现初始点丢失
    • index 3(Area 13)被跳过的第一行是2022-03的数据,刚好被xrange ['2022-04':*]裁剪,表面上看起来正常,实际也丢失了数据点
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:03:22