web-dev-qa-db-fra.com

Gnuplot date / heure sur l'axe des x

J'ai une question rapide concernant les dates et les heures sur l'axe des x dans GNUPLOT. Je laisse le code parler:

Ce sont mes données:

#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

Et c'est le code qui génère le graphique:

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!

Le problème est-il l'espace entre date et time sur l'axe des x? Sinon, à votre avis, quel pourrait être le problème?

35
Jose Salvatierra

Gnuplot ne s'attend pas vraiment à ce que les données de temps soient entre guillemets, vous devez donc le dire:

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

Vous pouvez mettre les guillemets doubles entre guillemets simples comme je l'ai fait ici, ou échapper aux guillemets:

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

il en va de même pour votre spécification xrange:

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

Si vous supprimez les guillemets dans le fichier de données, vous pouvez utiliser la mise en forme que vous aviez à l'origine, sauf que les numéros de colonne seront décalés de 1 car la date occupe deux colonnes sans les guillemets.

34
andyras

Il semble que la réponse soit oui, le problème était l'espace.

cela semble résoudre le problème:

set datafile separator ","

et en séparant les temps et les données par des virgules.

7
Jose Salvatierra

D'après ce que j'ai compris, l'ordre des instructions est important, je pourrais me le permettre en utilisant:

  • timefmt est pour les données et doit être le même pour xrange
  • format x sert uniquement à afficher

            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"]
    
0
Pipo