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

如何消除gnuplot绘图Y轴上的多余空行?

问题描述

我尝试绘制feedings.data数据集,但输出图表的Y轴出现了多余空行。

数据集内容 (feedings.data)

2023-01-22 09:00
2023-01-22 11:40
2023-01-22 13:30
2023-01-22 19:40
2023-01-22 22:15
2023-01-23 04:45
2023-01-23 07:45
2023-01-23 10:15
2023-01-23 12:30
2023-01-23 13:30
2023-01-23 17:45
2023-01-23 22:45
2023-01-24 02:45
2023-01-24 07:30
2023-01-24 10:30
2023-01-24 13:30
2023-01-24 17:45

简化后的gnuplot程序

reset
set   output "./feedings.png"
set   xdata time
set   format x "%H:%M"
set   ytics time;
set   format y "%Y-%m-%d"

plot "./feedings.data" using (timecolumn(2, "%H:%M")):(timecolumn(1, "%Y-%m-%d")) with points;

问题现象

Y轴存在多余空行,图表显示异常。


解决方案

Y轴空行是因为gnuplot默认会为时间轴生成均匀分布的刻度,即便对应日期没有数据。可通过以下两种方式解决:

方法1:手动指定Y轴刻度

直接将数据中出现的唯一日期设为Y轴刻度,彻底避免空行:

reset
set output "./feedings.png"
set xdata time
set format x "%H:%M"
set ytics time
set format y "%Y-%m-%d"
# 手动设置数据中存在的日期作为Y轴刻度
set ytics ("2023-01-22" strptime("%Y-%m-%d", "2023-01-22"), \
           "2023-01-23" strptime("%Y-%m-%d", "2023-01-23"), \
           "2023-01-24" strptime("%Y-%m-%d", "2023-01-24"))
plot "./feedings.data" using (timecolumn(2, "%H:%M")):(timecolumn(1, "%Y-%m-%d")) with points

方法2:限制Y轴范围并自动生成刻度

先从数据中读取最小和最大日期,锁定Y轴范围,让gnuplot只生成有效刻度:

reset
set output "./feedings.png"
set xdata time
set format x "%H:%M"
set ytics time
set format y "%Y-%m-%d"
# 统计数据中的日期范围
stats "./feedings.data" using (timecolumn(1,"%Y-%m-%d")) nooutput
# 设置Y轴范围为数据实际覆盖区间
set yrange [STATS_min : STATS_max]
set ytics auto
plot "./feedings.data" using (timecolumn(2, "%H:%M")):(timecolumn(1, "%Y-%m-%d")) with points

内容的提问来源于stack exchange,提问作者William R. Greene -- 'Bill'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:10:19