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

使用Gnuplot绘制时间轴对齐的温度曲线图遇问题求助

解决Gnuplot绘制24小时温度时序图的问题

一、修复HH:MM格式下的X轴异常与数据识别错误

你最初用HH:MM格式存储时间时,Gnuplot会把这些时间视为同一天的循环值(比如昨天19:00和今天19:00的HH:MM完全相同),导致X轴显示00:00到00:00的循环范围。手动设置时间范围时报错all points y value undefined!,是因为Gnuplot无法将纯HH:MM映射到你指定的跨天时间区间。

如果想保留HH:MM格式,可按以下方式处理:

  1. 将时间转换为相对于起始时刻的分钟数(首行=0分钟,末行=1439分钟),在Gnuplot中动态计算:
    # 告诉Gnuplot第一列是HH:MM格式
    set timefmt "%H:%M"
    # 将时间转换为分钟数并绘图
    plot "fre.24.val" using (strptime("%H:%M", strcol(1))):2 with lines title "当前温度", \
         "" using (strptime("%H:%M", strcol(1))):3 with lines title "24小时前温度"
    # 设置X轴刻度为对应的HH:MM
    set xtics 1440/24, 1440/48 rotate by 45
    set format x "%H:%M"
    
  2. 若要强制X轴显示跨天范围,可在Python生成数据时给昨天的时间加上日期后缀,本质和改用%Y-%m-%d %H:%M的思路一致。

二、校准带日期时间格式的X轴范围

改用%Y-%m-%d %H:%M格式后,需确保Gnuplot正确解析时间并动态匹配当前24小时窗口:

完整Gnuplot脚本示例

# 配置时间解析格式
set timefmt "%Y-%m-%d %H:%M"
set xdata time

# 设置X轴范围为当前时间前24小时到当前时间
set xrange [strftime("%Y-%m-%d %H:%M", time(0)-86400):strftime("%Y-%m-%d %H:%M", time(0))]

# 配置X轴刻度显示
set xtics 3600 rotate by 45  # 每小时一个刻度,旋转45度避免重叠
set format x "%H:%M"

# 处理数据缺失,过滤无效值(假设缺失值为空,可根据实际调整)
plot "fre.24.val" using 1:($2 eq "" ? NaN : $2) with lines title "当前温度", \
     "" using 1:($3 eq "" ? NaN : $3) with lines title "24小时前温度"

关键检查点

  1. Python数据生成准确性:确保末行时间是当前时间-1分钟,示例代码:
    import datetime
    end_time = datetime.datetime.now() - datetime.timedelta(minutes=1)
    start_time = end_time - datetime.timedelta(hours=24)
    # 循环生成每分钟的时间、当前温度、24小时前温度
    
  2. Gnuplot时间范围匹配:time(0)是当前时间戳,86400是24小时的秒数,strftime转换后的格式必须和数据文件中的完全一致(包括分隔符、补零规则)。

三、解决数据缺失导致的曲线异常

你用unique避免异常曲线是可行的,但更精准的方式是过滤无效数据点:

  • 如果温度缺失时存储的是空字符串或特定值(如-999),在Gnuplot中用NaN标记这些点,Gnuplot会自动跳过,不会生成异常连线:
    # 假设缺失值为-999
    plot "fre.24.val" using 1:($2 == -999 ? NaN : $2) with smooth csplines title "当前温度"
    
  • 如果是数据点不连续(少了几分钟的数据),用with lines替代csplines可以避免曲线强制插值,保留真实断点;若需要平滑曲线,确保有效数据点连续后再用csplines。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:12:52