Gnuplot 5.4.4中如何让伪列0显示年积日并适配xdata time?
Gnuplot 5.4.4:让伪列0显示年积日并结合xdata time处理
问题描述
使用Gnuplot 5.4.4时,希望将伪列$0作为年积日(每行对应1月1日起的一天),结合xdata time处理,但出现异常:
- 初始绘图命令:
plot filename u 0:1 - 设置x轴为时间类型并指定年积日格式后:
伪列set xdata time; set timefmt "%j"; replot$0被错误解析为Unix时间戳的秒数,而非年积日,导致刻度显示异常。 - 尝试设置刻度标签格式也无法解决:
(注:原问题附两张异常图,表现为x轴刻度无正确年积日递增,多显示为固定值)set format x "%j"
解决方法
伪列$0是从0开始的行索引,开启xdata time后,Gnuplot会直接将数值当作Unix时间戳(秒数)处理,而非年积日。需将$0转换为对应年积日的时间戳,具体方案如下:
方案1:基于年积日字符串转换时间戳
每行对应1月1日起的一天,$0+1即为当前行的年积日(范围1-365),用strptime()将其转换为Gnuplot可识别的时间戳:
# 开启时间轴并指定年积日解析格式 set xdata time set timefmt "%j" # 设置x轴刻度显示为年积日 set format x "%j" # 将$0+1转换为年积日对应的时间戳,作为x轴数据 plot filename u (strptime("%j", sprintf("%d", $0+1))):1
方案2:基于基准日期偏移天数
若需适配闰年或指定具体年份,可以某一年的1月1日为基准,加上$0天的秒数偏移(1天=86400秒):
set xdata time set timefmt "%Y-%m-%d" set format x "%j" # 以2024年1月1日为基准,$0为天数偏移 plot filename u (strptime("%Y-%m-%d", "2024-01-01") + $0*86400):1
补充说明
- 方案1默认使用1970年的年积日,若数据对应闰年,可修改为
strptime("%Y-%j", sprintf("2024-%d", $0+1))来指定闰年年份 - 两种方案均可实现x轴与年积日的正确绑定,刻度显示与数据行一一对应
内容的提问来源于stack exchange,提问作者jmmo
相关产品推荐
相关产品推荐

