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

gnuplot处理YYYY-MM-DD,HH:MM格式时间数据绘图报错求助

解决gnuplot绘制电力间隔数据的问题

核心问题分析

你遇到的空X范围报错和数据挤在一起的问题,本质是gnuplot没有正确解析你的日期时间格式,默认把字符串当成非数值处理,导致X轴没有有效范围,或者所有时间被识别为同一个值。

分步解决方案

你的数据是逗号分隔的YYYY-MM-DD,HH:MM,HH:MM,n.nn,kWh,需要先让gnuplot识别合并后的日期+时间字符串,再映射到X轴。

  1. 设置数据分隔符
    gnuplot默认用空格分隔数据,你的数据是逗号分隔,必须先声明:

    set datafile separator ','
    
  2. 配置时间解析规则
    告诉gnuplot如何解析「日期+开始时间」的组合格式:

    set timefmt "%Y-%m-%d,%H:%M"
    set xdata time  # 开启X轴的时间模式
    
  3. 优化X轴显示效果
    为了避免时间标签重叠,设置显示格式和旋转:

    set format x "%Y-%m-%d\n%H:%M"  # 换行显示日期和时间
    set xtics rotate by 45 right
    set ylabel "Energy Usage (kWh)"
    
  4. 正确指定绘图的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:50:34