2011-01-25 7 views
5

Actuellement j'utilise gnuplot pour tracer des données sur une ligne de temps. Cependant, la précision de la ligne de temps est en millisecondes, mais gnuplot semble seulement pouvoir gérer les secondes.gnuplot alternative avec une plus grande précision dans le temps

J'ai regardé quelques alternatives, mais j'ai vraiment besoin de quelque chose comme gnuplot qui peut supporter des fractions de seconde.

Le langage de programmation utilisé pour le script principal est Python et même si j'ai regardé matplotlib, il semble que ce soit beaucoup plus «lourd» que gnuplot. Comme je ne mettrai pas toujours à jour le côté graphique, je veux que ce soit aussi facile que possible.

Des suggestions?

Mise à jour

J'utilise cela avec gnuplot:

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

Cependant il n'y a pas% f pour obtenir millisecondes. Par exemple, cela fonctionne:

2011-01-01-09:00:01 

mais j'ai besoin:

2011-01-01-09:00:01.123456 
+2

Pouvez-vous poster un extrait des données que vous essayez de tracer et les commandes que vous utilisez? gnuplot ne devrait pas se soucier des unités - comment savoir si elles sont en secondes ou en millisecondes, après tout? - Donc, je ne suis pas sûr de ce que ça fait ou pas, ce n'est pas ce que vous voulez. – DSM

+0

Le plus petit timefmt est une seconde car une minute a 60 secondes et doit être manipulée spécialement. Avec des millisecondes je ne comprends pas quel est le problème? – Tom

+0

Ah, je comprends le problème maintenant, oui, c'est vraiment un problème et je ne pense pas qu'il existe une solution élégante. – Tom

Répondre

10

Vous pouvez définir le format des tiques avec

set format x '%.6f' 

ou (peut-être, je ne l'ai pas essayé, comme je préfère maintenant utiliser Matplotlib et ne pas gnuplot installé sur mes machines):

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

(notez le nombre de chiffres spécifiés ainsi que la chaîne de format %S). Vous trouverez plus de détails dans l'excellent not so Frequently Asked Questions.

+1

Cela ne fonctionne pas pour moi. J'ai copié les données du message original et l'émission de votre 'set timefmt « % Y-% m-% d-% H:% M:..% 6S' Bien que ce format est accepté, quand je lance la commande 'plot' I obtenir 'avertissement: Mauvais format de l'heure en string' sur tous les points de données –

+1

Si je retire la' .6' de la timefmt puis retirez les décimales de mes données, il sera alors travailler gnuplot ne semble pas vraiment être.. . capable de gérer secondes non entières –

+3

@thoughtadvances gnuplot 4.6 interprétera '% s' comme' double' ce qui signifie que les fractions de secondes sont correctement interprétées –

1

J'utilise gnuplot pour les mêmes fins, mon entrée ressemble à:

35010.59199,100,101
35010,76560, 100,110
35011,05703,100,200
35011,08119,100,110
35011,08154,100,200
35011.08158,100,200
35011.08169,100,200
35011.10814,100,200
35011.16955,100,110
35011.16985,100,200
35011.17059,100,200

La première colonne est secondes depuis minuit et après la virgule une partie de nanoseconde. Vous pouvez enregistrer ce dans un fichier csv et gnuplut faire:

set datafile separator ',' 
plot "test.csv" using 1:3 with lines 
1

J'ai initialement mal compris votre problème. Je pense que la résolution plus fine au format d'heure est un gros problème avec gnuplot et un qui, à ma connaissance, n'est pas implémenté.

Un possible le travail autour serait d'utiliser awk pour convertir votre date dans le nombre de secondes avec quelque chose comme

plot "<awk 'your_awk_one_liner' file1.dat" with lines 

puis le faire un double régulier en double intrigue et oublier qu'il était à chaque fois du tout (un peu comme la solution de Martin). Je crains que je ne suis pas très bon avec awk et donc je ne peux pas aider à ce bit - ces pages pourraient aider si - http://www.gnu.org/manual/gawk/html_node/Time-Functions.html et http://www.computing.net/answers/unix/script-to-convert-datetime-to-seco/3795.html. L'utilisation de awk avec gnuplot est décrite ici: http://t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html.

Vous pouvez ensuite tracer un second axe (et non les données) avec le temps correct - quelque chose comme la méthode utilisée ici: Is there a way to plot change of day on an hourly timescale on the x axis?

Je crains que je n'ai pas le temps d'essayer d'écrire un complet solution - mais quelque chose de raisonnable devrait être possible.

Bonne chance - tenez-nous au courant si vous avez quelque chose qui fonctionne - je serais intéressé.

9

Selon le gnuplot 4.6 manual il déclare, sous la rubrique "heure/date" (page spécificateurs 114 du gnuplot 4.6 PDF):

% S - En second lieu, entier 0-60 sur la sortie, (double) sur entrée

ce que cela signifie est que lors de la lecture horodatages tels que 2013-09-16 09:56:59.412 la partie décimale est inclus dans le cadre du spécificateur %S. Un tel horodatage sera traité correctement:

set timefmt "%Y-%m-%d %H:%M:%S" 
set datafile separator "," 
plot "timed_results.data" using 1:2 title 'Results' with lines 

et nourris avec des données comme:

2013-09-16 09:56:53.405,10.947 
2013-09-16 09:56:54.392,10.827 
2013-09-16 09:56:55.400,10.589 
2013-09-16 09:56:56.394,9.913 
2013-09-16 09:56:58.050,11.04 
+0

Ceci est une très bonne réponse et aborde directement la question à portée de main -. Comment avoir les valeurs milliseconde reconnues par gnuplot ... + ve 1 ici. – Xofo

+0

cela devrait être la réponse acceptée. J'utilise cette solution avec succès. cela fonctionne – Xofo

+0

trouver pour la lecture des données de temps, mais pas si bien pour l'écrire.Par exemple, 'set format x"% H:% M:% S "', combiné avec des données dans la même seconde, donne toutes les x marquées avec la même valeur. Par exemple, on obtient "09:56:53", "09:56:53", "09:56:53" au lieu de "09: 56: 53.4", "09: 56: 53.5", "09:56: 53,6 ". – TrentP

Questions connexes