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

Gnuplot 5.4.4中如何让伪列0显示年积日并适配xdata time?

Gnuplot 5.4.4:让伪列0显示年积日并结合xdata time处理

问题描述

使用Gnuplot 5.4.4时,希望将伪列$0作为年积日(每行对应1月1日起的一天),结合xdata time处理,但出现异常:

  1. 初始绘图命令:
    plot filename u 0:1
    
  2. 设置x轴为时间类型并指定年积日格式后:
    set xdata time; set timefmt "%j"; replot
    
    伪列$0被错误解析为Unix时间戳的秒数,而非年积日,导致刻度显示异常。
  3. 尝试设置刻度标签格式也无法解决:
    set format x "%j"
    
    (注:原问题附两张异常图,表现为x轴刻度无正确年积日递增,多显示为固定值)

解决方法

伪列$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:18