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?
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.
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.
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 xrangeformat 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"]