如何在gnuplot中偏移xtics时间值且不修改原始数据?
问题描述
我有一份表格数据需要用gnuplot绘制,其第一列x为Unix时间戳(自Epoch以来的秒数)。我希望x轴刻度(xtics)仅显示小时,且每3小时显示一次,即:
... 9 12 15 18 ...
因此我设置了如下配置:
set xdata time set format x "%k" set xtics 3600,10800
该配置生效,但当前刻度显示的是UTC时间,我需要转换为本地时间(偏移-2小时),即对应位置应显示:
... 7 10 13 16 ...
请问是否有方法仅对xtics应用偏移公式而不影响绘图函数?我可以直接对数据第一列减去3小时的偏移量,但不想这么做。
解决方法
可以通过自定义刻度标签的方式实现时间偏移,无需修改原始数据。核心是让gnuplot在生成刻度文字时,对时间戳加上偏移量后再格式化显示。
具体配置代码如下:
set xdata time set format x "%k" # 定义偏移量:-2小时对应-7200秒 time_offset = -7200 # 自定义刻度标签,对原始时间戳应用偏移后再格式化 set xtics 3600,10800 format "%k" timedate(@* + time_offset)
关键说明
timedate(@* + time_offset)会针对每个刻度的原始时间戳,加上设定的偏移量后,再按%k格式(24小时制小时数,带前导空格)转换为显示文字。- 原始数据的绘图位置完全不受影响,仅改变刻度的显示值。
- 如果需要正向偏移(比如+3小时),只需将
time_offset设为对应正秒数即可(如time_offset = 10800)。
内容的提问来源于stack exchange,提问作者Luis A. Florit
相关产品推荐
相关产品推荐

