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

Gnuplot夜间跨午夜时间区间柱状图绘制问题求助

Gnuplot夜间跨午夜时间区间柱状图绘制问题求助

问题诊断

你遇到的核心问题是跨午夜的时间区间(如22:40到次日03:20)无法正常渲染:因为timecolumn()返回的03:20时间戳会小于22:40,导致boxxyerror的X方向范围反向,图形无法正确显示。另外你尝试修改xrange和手动添加xtics的方式,没有从根本上解决时间区间的有效性问题,也没匹配上“X轴18:00-06:00、午夜居中”的核心需求。

修正后的完整代码

下面是完全符合你需求的代码,包含跨午夜时间处理、X轴的正确范围和刻度设置:

reset session

$Data <<EOD
06.03.2019  09:45   11:17
07.03.2019  22:40   03:20
EOD

StartDay = "06.03.2019"
# 计算当前日期相对于起始日期的Y轴偏移量(用于Y轴排序)
DaysAfterStartDay(day) = int((strptime("%d.%m.%Y", day) - strptime("%d.%m.%Y", StartDay)) / 86400)

set xdata time
set timefmt "%H:%M"
set format x "%H:%M"

# 核心:处理跨午夜的时间区间
# 如果结束时间戳 < 开始时间戳,说明跨了午夜,给结束时间加24小时(86400秒)
get_valid_end_time(start_col, end_col) = (
    t_start = timecolumn(start_col),
    t_end = timecolumn(end_col),
    t_end < t_start ? t_end + 86400 : t_end
)

# 设置X轴范围:从当日18:00到次日06:00(共12小时,午夜正好在中心)
set xrange ["18:00":"06:00" + 86400]
# 自定义X轴刻度,让午夜居中显示
set xtics ("18:00" 18*3600, "21:00" 21*3600, "00:00" 24*3600, "03:00" 27*3600, "06:00" 30*3600)
set xtics center rotate by 30

# 绘制带误差的矩形(boxxyerror),Y轴显示日期
plot $Data u (t_start=timecolumn(2)):(y=DaysAfterStartDay(strcol(1))): \
    (t_start):(get_valid_end_time(2, 3)):(y-0.2):(y+0.2):ytic(1) w boxxyerror \
    fs solid 1.0 lc rgb "blue" notitle, \
# 可选:添加午夜参考线,方便观察
     NaN u (24*3600):(y) w l lc rgb "red" dt 2 title "Midnight"

关键优化说明

  1. 跨午夜时间修复:
    新增get_valid_end_time()函数,自动判断结束时间是否跨午夜——如果结束时间戳小于开始时间,就加上24小时,保证X方向的区间为正,矩形能正确绘制。

  2. X轴精准匹配需求:

    • xrange ["18:00":"06:00"+86400] 直接定义了12小时的时间范围,让午夜(24:00)刚好处于X轴中心位置。
    • 自定义xtics刻度,清晰标注18:00、21:00、00:00、03:00、06:00,完全符合你“X轴从18:00到06:00”的要求。
  3. 图形样式优化:
    调整了xtics的旋转角度和居中,避免标签重叠;Y轴的日期标签直接使用原始数据的第一列,保持可读性。

额外提示

如果你的数据中有更早或更晚的时间区间,只需要调整xrange的范围即可。比如要显示17:00到07:00,只需要把xrange改成["17:00":"07:00"+86400],并同步更新xtics标签。

如果还有其他细节需要调整(比如柱状图颜色、Y轴间距等),随时告诉我!

备注:内容来源于stack exchange,提问作者user25865121

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:45:30