2010-11-12 4 views
1

quelqu'un pourrait m'aider s'il vous plaît. J'essaie de créer un tableau simple.gnuplot v4.4: Problème de traçage en utilisant timeseries x axe

set datafile separator "," 
set xdata time 
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y 
plot ["13:00":"14:00"] './data.csv' using 1:2 with lines 

data.csv:

26/10/2010 13:30:01,1 

26/10/2010 13:30:12,2 

26/10/2010 13:30:23,3 

26/10/2010 13:30:34,4 

me donne l'erreur:

line 6: all points y value undefined! 

J'ai essayé toutes sortes de réglages de TimeFmt!

Un grand merci

Répondre

7

Le problème est la définition de la xrange, il doit être le même format timefmt (voir? Time_axis)

Les œuvres suivantes pour moi

set datafile separator "," 
set xdata time 
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y 
set xrange["26/10/2010 13:00:00":"26/10/2010 14:00:00"] 
plot './data.csv' using 1:2 with lines 

Oh, et je se débarrasser des lignes vides entre chaque ligne de données.

Si vous ne voulez pas modifier le fichier pour se débarrasser des données vides, vous pouvez utiliser awk dans gnuplot comme si,

plot "<awk '$0!~/^$/ {print $0}' ./data.csv" using 1:2 with lines 

pour la commande finale.

EDIT: plus d'informations dans le cas où il y a encore un problème (voir les commentaires)

je avais besoin d'utiliser la commande awk pour obtenir les données à tracer. Cela consistait à supprimer les lignes vides dans les données. Combiner awk et gnuplot de cette façon fonctionne sur les systèmes Linux, je ne suis pas sûr de gnuplot sur Windows. Il se peut que certaines tuyauteries ne se produisent pas, auquel cas vous devrez supprimer les lignes vides avant d'utiliser gnuplot. (vous pouvez toujours utiliser awk pour cela, mais peut-être pas dans la commande plot?)

Si vous utilisez Linux et que ce qui précède ne fonctionne pas, alors le problème est autre. Peut-être y at-il d'anciennes commandes stockées dans la session gnuplot? Pour m'assurer que nous faisons exactement la même chose, je donne le script shell que j'ai utilisé (j'ai changé le xrange pour mieux ajuster les données et faire un meilleur plot, notez aussi le $ au lieu de $, sinon le shell interprète mal le $ signe).

Bon: Je fait le fichier data.csv.sh dans un nouveau dossier (dans le cas où vous avez des fichiers ou data.csv data.csv.png déjà) ,:

#!/bin/bash 

echo "26/10/2010 13:30:01,1 

26/10/2010 13:30:12,2 

26/10/2010 13:30:23,3 

26/10/2010 13:30:34,4" > "data.csv" 


gnuplot<<EOF 
set term png small 
set output "data.csv.png" 
set datafile separator "," 
set xdata time 
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y 
set xrange["26/10/2010 13:30:00":"26/10/2010 13:31:00"] 
plot "<awk '\$0!~/^\$/ {print \$0}' ./data.csv" using 1:2 with lines 
set output 
set term pop 
EOF 

ensuite sur la Terminal I tapé:

chmod +wrx data.csv.sh && ./data.csv.sh 

pour rendre le script shell exécutable, puis de l'exécuter.

Le fichier data.csv.png ressemble à la suivante alt text

Tous les meilleurs

Tom

+0

Un grand merci pour votre aide Tom. Maintenant, je reçois un graphique avec un bel axe x & y, mais sans points de données tracés. J'ai joué avec la clause data & "using" sans effet! – Tony

+0

@Tony C'est étrange, avez-vous utilisé la commande " Tom

1

Je voulais juste ajouter à la discussion ci-dessus en cas, quelqu'un, d'avoir les mêmes problèmes.J'ai essayé de tracer une série temporelle, tels que:

07/22/13 01:00 120

Quand j'ai essayé de tracer en suivant la procédure ci-dessus, je suis la mauvaise erreur de format de temps. J'ai changé mes données d'entrée:

07/22/2013 01:00 120

Après le changement, il a parfaitement fonctionné. Cela aurait du sens car gnuplot le 22/07/13 est vague. C'est, est-ce 1913, 1813, ou 2013 (ou tout autre yy13).

Questions connexes