You need to enable JavaScript to run this app. Gnuplot绘制含W字符串的周数数据及控制xtics增量的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Gnuplot绘制含W字符串的周数数据及控制xtics增量的实现方法

Gnuplot周维度时间序列绘图修正方案

原脚本核心错误定位

  • 时间格式串定义错误:待解析的周字段为2020-W09格式,中间的W是固定文本而非时间占位符,原格式串"%Y-%s%W"无法匹配实际字符串结构
  • Gnuplot字符串下标从1开始计数,原脚本用strcol(col)[2:3]提取周数,实际取到的是年份中间的字符,导致计算出的时间戳完全错位,所有数据点堆叠在x轴最左侧
  • xtics配置缺失:没有指定刻度增量,时间轴自动生成的刻度要么过密要么错位,无法匹配周维度的展示需求

分问题解决逻辑

1. ISO周格式(YYYY-Www)的时间解析

利用Gnuplot内置的%V时间占位符(对应两位ISO周数)完成解析,核心逻辑是跳过原字符串中的固定W字符,把拼接后的可识别字符串传给时间解析函数,不需要手动计算周数对应的时间偏移:

  • 对2020-W09这类字符串,提取前5位(2020-)和后2位(09),跳过第6位的W,拼接为Gnuplot可识别的2020-09
  • 匹配解析格式串%Y-%V,直接得到对应周的时间戳

2. 时间轴xtics增量控制

Gnuplot时间轴的刻度增量单位为秒,只需要按固定间隔设置即可:

  • 预定义单周对应的秒数常量SECPERWEEK = 3600*24*7
  • 通过set xtics 增量值指定刻度间隔,比如每2周一个刻度就设置为2*SECPERWEEK,可根据数据密度调整
  • 自定义刻度显示格式为"%Y-W%V",直接输出和原始数据一致的周数标签,避免格式混乱

修正后可直接运行的脚本

# 自动拉取公开检测数据
system("wget https://opendata.ecdc.europa.eu/covid19/testing/csv -P $PWD -O testing.csv")

reset
set term wxt font ',11' size 1200,800
set datafile separator ","
set grid

# 常量定义:单周对应的秒数
SECPERWEEK = 3600*24*7
# 启用时间轴模式
set xdata time
# 时间解析格式:年+两位ISO周数
parse_format = "%Y-%V"
# 设置xtics间隔:每2周生成一个刻度
set xtics 2*SECPERWEEK
# 刻度显示格式:输出YYYY-Www样式标签
set xtics format "%Y-W%V"
# 刻度标签旋转45度避免重叠
set xtics rotate by -45

# 自定义周时间解析函数:跳过原字符串中的W字符
parse_week(col) = timecolumn(col, parse_format, strcol(col)[1:5] . strcol(col)[7:8])

# 绘制法国地区的周维度曲线
plot '< grep France testing.csv' u (parse_week(3)):4 w l lw 2 notitle

常见调整提示

  • 如果需要更密的刻度,把xtics的增量改为1*SECPERWEEK即可
  • 如果数据时间跨度超过3个月,可把刻度间隔调整为4*SECPERWEEK(月度间隔),避免标签拥挤
  • 不需要手动计算周数和初始日期的偏移量,Gnuplot内置的%V占位符会自动处理ISO周的日期对应关系

内容的提问来源于stack exchange,提问作者Suntory

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 00:15:03