如何消除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'
相关产品推荐
相关产品推荐

