如何让gnuplot读取我的时间格式并按输入文件的顺序保存时间?

如何让gnuplot读取我的时间格式并按输入文件的顺序保存时间?,gnuplot,Gnuplot,我试图让gnuplot(a)读取我的输入时间格式,(b)按照输入文件的顺序绘制时间。我试图绘制过去24小时内从18 UTC开始的数值变化 它似乎不喜欢: set xdata time set timefmt "%H%M" 它还喜欢绘制从0000 UTC到2300 UTC的xaxis值,并删除前导零。请参阅下面的输入文件。我希望最新数据(本例中为1800UTC)位于xaxis的右侧。谢谢 1900 23 2000 22 2100 22 2200 22 2300 22 0000 22

我试图让gnuplot(a)读取我的输入时间格式,(b)按照输入文件的顺序绘制时间。我试图绘制过去24小时内从18 UTC开始的数值变化

它似乎不喜欢:

set xdata time

set timefmt "%H%M"
它还喜欢绘制从0000 UTC到2300 UTC的xaxis值,并删除前导零。请参阅下面的输入文件。我希望最新数据(本例中为1800UTC)位于xaxis的右侧。谢谢

1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21

等等…

Michael O的建议。使用完整的日期,包括年、月、日,可能是处理主题最通用的方法。 但是,如果您不能或不想更改数据,可以使用以下方法:

解决方案1:当数据超过“0000”时,增加一天(或86400秒)

解决方案2:使用第一列作为字符串标签(只有在时间步长不变的情况下,x轴才会正确缩放)。为了好玩,我添加了只显示部分标签的可能性

### time "without" date
reset session

$Data <<EOD
1900 23
2000 22
2100 22
2200 22
2300 22
0000 22
0100 22
0200 21
0300 21
0400 21
0500 21
EOD

set multiplot layout 2,1

    # solution 1: add extra day
    set xdata time
    set timefmt "%H%M"
    set format x "%H%M"
    extraday = 0
    plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

    # solution 2: use timecolumn as xticlabel
    Modulo(x,n) = x - floor(x/n)*n
    plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

unset multiplot
### end of code
####没有日期的时间
重置会话

$Data您只能通过添加有关日期的附加信息来执行此操作:年、月、日。因为gnuplot不知道什么是“0000”,是第二天还是当前一天。