【问题标题】:Gnuplot date/time in x axisx 轴上的 Gnuplot 日期/时间
【发布时间】:2013-07-21 10:32:11
【问题描述】:

我有一个关于 GNUPLOT 中 x 轴上的日期和时间的快速问题。我让代码来说话:

这是我的数据:

#Time   Data in Data out
"2013-07-22 15:59:00"   6286    3730
"2013-07-22 15:58:00"   10695   14589
"2013-07-22 15:57:00"   17868   26464
"2013-07-22 15:56:00"   18880   34012
"2013-07-22 15:55:00"   19206   41192
"2013-07-22 15:54:00"   20365   43218
"2013-07-22 15:53:00"   18459   39298
"2013-07-22 15:52:00"   3420    4686
"2013-07-22 15:51:00"   3256    4942

这是生成图表的代码:

gnuplot> set title "Data usage over the last 24 hours"
gnuplot> unset multiplot
gnuplot> set xdata time
gnuplot> set style data lines  
gnuplot> set term png
Terminal type set to 'png'
Options are 'nocrop font "arial,12" fontscale 1.0 size 640,480 '
gnuplot> set timefmt "%Y-%m-%d %H:%M:%S"
gnuplot> set format x "%m-%d\n%H:%M"
gnuplot> set xlabel "Time"
gnuplot> set ylabel "Traffic" 
gnuplot> set autoscale y  
gnuplot> set xrange ["2013-07-21 16:00":"2013-07-22 16:00"]
gnuplot> set output "datausage.png"
gnuplot> plot "C:\\Users\\blah\\Desktop\\plot.tmp" using 1:2 t "inbound" w lines, "C:\\Users\\blah\\Desktop\\plot.tmp" u 1:3 t "outbound" w lines
                                                                                                                                                                 ^
         all points y value undefined!

问题是x轴上datetime之间的空间吗?如果不是,您认为可能是什么问题?

【问题讨论】:

    标签: date time gnuplot


    【解决方案1】:

    似乎答案是肯定的,问题出在空间上。

    这样做似乎可以解决问题:

    set datafile separator ","

    实际上用逗号分隔时间和数据。

    【讨论】:

    • 这也有效。似乎当空格是分隔符时,引号被视为数据的一部分,因此您需要对其进行转义。当逗号是分隔符时,gnuplot 显然会忽略引号。
    【解决方案2】:

    Gnuplot 实际上并不希望时间数据用引号引起来,所以你必须告诉它:

    set timefmt '"%Y-%m-%d %H:%M:%S"'
    

    您可以像我在这里所做的那样将双引号放在单引号内,或者转义引号:

    set timefmt "\"%Y-%m-%d %H:%M:%S\""
    

    这同样适用于您的 xrange 规范:

    set xrange ['"2013-07-21 16:00"':'"2013-07-22 16:00"']
    

    如果删除数据文件中的引号,则可以使用原来的格式,除了列号将移动 1,因为没有引号的日期占据了两列。

    【讨论】:

    • 值得强调这个答案的第一行:“Gnuplot 实际上并不希望时间数据用引号引起来,所以你必须告诉它:”!!谢谢你。 Gnuplot 实际上似乎可以很好地解析日期,但得到了一个非常奇怪的范围,从负数到正数。
    • 另外,使用 1:2 也不是可选的。如果我只使用绘图“/tmp/foo.gnuplot”,则会收到错误“需要完整使用 x 时间数据的规范”。
    【解决方案3】:

    据我了解,说明的顺序很重要,我可以使用:

    • timefmt 用于数据,对于 xrange 必须相同
    • format x 仅用于显示

              set xdata time
              set timefmt "%Y%m%dT%H%M%S"
              set format x "%Y-%m-%d\n%H:%M:%S"
              # or with bash variables: set xrange ["$l_start_dt":"$l_end_dt"]
              set xrange ["20190620T000000":"20190628T000000"]
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多