gnuplot处理YYYY-MM-DD,HH:MM格式时间数据绘图报错求助
解决gnuplot绘制电力间隔数据的问题
核心问题分析
你遇到的空X范围报错和数据挤在一起的问题,本质是gnuplot没有正确解析你的日期时间格式,默认把字符串当成非数值处理,导致X轴没有有效范围,或者所有时间被识别为同一个值。
分步解决方案
你的数据是逗号分隔的YYYY-MM-DD,HH:MM,HH:MM,n.nn,kWh,需要先让gnuplot识别合并后的日期+时间字符串,再映射到X轴。
设置数据分隔符
gnuplot默认用空格分隔数据,你的数据是逗号分隔,必须先声明:set datafile separator ','配置时间解析规则
告诉gnuplot如何解析「日期+开始时间」的组合格式:set timefmt "%Y-%m-%d,%H:%M" set xdata time # 开启X轴的时间模式优化X轴显示效果
为了避免时间标签重叠,设置显示格式和旋转:set format x "%Y-%m-%d\n%H:%M" # 换行显示日期和时间 set xtics rotate by 45 right set ylabel "Energy Usage (kWh)"正确指定绘图的X/Y映射
需要把第一列(日期)和第二列(开始时间)拼接成完整的时间字符串,转成gnuplot能识别的时间戳作为X轴,第四列作为Y轴的能耗值:# 绘制每个间隔的开始时间对应能耗点 plot "your_data.csv" using (strptime("%Y-%m-%d,%H:%M", sprintf("%s,%s", strcol(1), strcol(2)))):4 with points title "Start Time vs Usage"如果想绘制整个时间间隔的线段(从开始时间到结束时间,Y值为对应能耗),可以用向量绘制:
# 绘制间隔时间段的水平线段 plot "your_data.csv" using \ (strptime("%Y-%m-%d,%H:%M", sprintf("%s,%s", strcol(1), strcol(2)))):4: \ (strptime("%Y-%m-%d,%H:%M", sprintf("%s,%s", strcol(1), strcol(3)))-strptime("%Y-%m-%d,%H:%M", sprintf("%s,%s", strcol(1), strcol(2)))):0 \ with vectors nohead title "Interval Usage"
常见问题排查
- 空X范围报错:检查是否遗漏了
set xdata time,或者timefmt格式和拼接后的时间字符串不匹配。比如如果数据里的时间是HH:MM:SS而不是HH:MM,要调整timefmt为%Y-%m-%d,%H:%M:%S。 - 数据挤在同一时间段:确认所有数据的日期时间格式统一,没有格式错误的行(比如缺失日期、时间格式不对),同时确保
using参数正确拼接了日期和时间列。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

