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

时间:2019-01-04 00:14:28

标签: gnuplot

我试图让gnuplot能够(a)读取我的输入时间格式,并且(b)按照输入文件的顺序绘制时间。我正在尝试绘制过去24小时内从18 UTC开始的值更改。

它看起来不像:

set xdata time

set timefmt "%H%M"

它也喜欢绘制我的xaxis值,从0000 UTC到2300 UTC,并删除前导零。请参阅下面的输入文件。我希望最新的数据(在这种情况下为1800UTC)在我的xaxis的右侧。谢谢。

1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21

以此类推...

1 个答案:

答案 0 :(得分:1)

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

...将导致:

enter image description here