Gnuplot设置X轴时间区间异常:数据点显示错误且X范围配置报错
解决gnuplot跨天时段价格绘图问题
问题根源
- 你用
timecolumn(1,"%H:%M")提取的并非当天秒数,而是带日期的完整epoch时间戳,数值远大于xrange [14400:79200]的范围,导致所有数据点被压缩到x轴右端。 - 直接用
set xrange ["09:00":"22:00"]会被解析为1970年1月1日的时段,和你的数据日期不匹配,因此报错空范围。
修正后的脚本
GNUTERM = "wxt" set terminal wxt enhanced set encoding utf8 set xlabel "Time" set ylabel "Price" # 关闭x轴的时间数据模式,改用数值模式处理当天秒数 unset xdata time # 设置x轴范围为当天4:00到22:00的秒数 set xrange [14400:79200] set yrange [0:] set grid # 手动设置x轴刻度,将秒数映射为HH:MM格式 set xtics ("04:00" 14400, "08:00" 28800, "12:00" 43200, "16:00" 57600, "20:00" 72000, "22:00" 79200) # 计算每个时间点的当天秒数:完整时间戳减去当天0点的时间戳 plot $Data u (timecolumn(1) - strptime("%Y-%m-%d", strftime("%Y-%m-%d", timecolumn(1)))):2 w lp pt 5 lc -1 notitle
关键说明
timecolumn(1)读取完整的epoch时间戳,strftime("%Y-%m-%d", timecolumn(1))提取日期部分,再用strptime转回当天0点的时间戳,两者相减得到当天已过秒数。- 若需要自动生成小时刻度,可替换xtics设置为:
这种方式重新开启时间数据模式,将当天秒数作为时间戳处理,同样能正确显示时分格式。set xdata time set timefmt "%s" set format x "%H:%M" set xtics 3600 # 每小时一个刻度
内容的提问来源于stack exchange,提问作者Navon
相关产品推荐
相关产品推荐

