J'ai des données dans un fichier texte sous la forme suivante :
# Date Temps T6 H6 T4 H4
03/01/05 09:30 19.5 27.0 22.5 23.0
04/01/05 11:41 19.6 28.0 22.3 24.0
10/01/05 09:30 18.7 40.0 22.2 22.0
Pour afficher T6 (3ème colonne) en fonction de la date, avec Gnuplot, il n'y a pas de problème ("plot 'th.txt' using 1:3 notitle with lines" en ayant défini l'axe des x comme une date).
Maintenant, je souhaiterais afficher le temps (colonne 2) en fonction de la date (colonne 1). J'essaye ceci mais çà ne fonctionne pas :
set term png small
set xdata time
set timefmt "%d/%m/%y"
set format x "%d/%m"
set ydata time
set timefmt "%H:%M"
set format y "%H:%M"
set xrange ["01/01/05":"31/12/05"]
set missing 'NaN'
set out "th05-date.png"
set title "Time of measurement - 2005"
set xlabel "Days"
set ylabel "Time"
set autoscale y
plot 'th.txt' using 1:2 notitle with lines
reset
En cherchant un peu sur internet, je suis tombé sur cette page (http://www.lsw.uni-heidelberg.de/manuals/gnuplot/gnuplot.htm(...) ) qui dit explicitement qu'il est impossible d'avoir deux axes différents de temps ("Since only one input format can be in force at a given time, all time/date quantities being input at the same time must be presented in the same format. Thus if both x and y data in a file are time/date, they must be in the same format").
La question est : est-ce que quelqu'un n'aurait quand même pas une astuce pour afficher, dans Gnuplot, une heure en fonction d'un jour ? (colonne 2 en fonction de la colonne 1)
A la limite, je veux bien changer de programme mais j'ai un impératif : il faut que ce soit en ligne de commande (donc pas Gnumeric ni OpenOffice.org Calc, etc.).
Merci d'avance !
# TEST OK
Posté par MAURY Christophe . Évalué à 1.
gnuplot 4.0 patchlevel 0
Paquet debian: gnuplot 4.0.0-2
Cela me sort un beau graphique.
# Cà marche mais ...
Posté par jayp . Évalué à 1.
- l'axe des x va du +/- 0/1/2005 (?) au 3/1/2005 (?)
- il y a des grandes "barres" horizontale dans tout le tracé alors que les données sont séquentielles (voir http://jepoirrier.free.fr/graphs/th05-date.png )
Pour mesurer l'ampleur de l'ensemble, voici :
- le fichier de données : http://jepoirrier.free.fr/graphs/th.txt
- le script : http://jepoirrier.free.fr/graphs/th05-date.inc (lancer "gnuplot th05-date.inc")
- le graphique résultant, donc : http://jepoirrier.free.fr/graphs/th05-date.png
Donc, Gnuplot affiche bien quelque chose mais ce n'est pas tout à fait ce que j'attendais ...
[^] # Re: Cà marche mais ...
Posté par Gyro Gearllose . Évalué à 2.
As-tu essayé jpgraph ( http://www.aditus.nu/jpgraph/ )
Ca fonctionne plutôt bien, mais il faut utiliser php.
Ca ne nécessite pas nécessairement de serveur apache, ou autres et fonctionne bien en ligne de commande.
Voilà, si j'ai du temps prochainement, je ferais un test....
D'ailleurs, pour mon application de pointage, je l'utilise pour afficher un graph des heures réalisées par semaine, ce qui correspond à peu près à ce que tu veux.
En espérant que ce commentaire sera utile.
# Tu as trouvé toi-même la réponse !
Posté par tipote . Évalué à 2.
La version de développement (en cvs) de gnuplot donne l'indication suivante concernant les formats d'heure et date :
Ainsi, il faut que tu t'arranges pour que tes données heure/date soient toutes dans le même format. En pratique, ça donne ça :
Le fichier de données original :
Il doit s'écrire :
Ca prend trois secondes avec un éditeur de texte, où tu remplaces "/05 " par "/05_00:00 01/01/05". Ainsi, les deux colonnes sont dans le même format.
Pourquoi mettre toute la deuxième colonne à la même date ? Parce que ce qui t'intéresse, c'est justement l'heure, mais que gnuplot prend en compte la donnée d'ensemble heure+date. (La commande 'set format ...' n'influe que sur la façon dont les échelles sont affichées en abscisse et ordonnée, les 'labels').
A quoi doit ressembler ton fichier de script ?
Pratiquement inchangé, à ceci près que tu n'appelles qu'une fois "set timefmt ...". J'ai utilisé le script suivant :
et j'obtiens le résultat attendu : http://tipote.free.fr/time.png
En conclusion, gnuplot, c'est formidable !
[^] # Re: Tu as trouvé toi-même la réponse !
Posté par jayp . Évalué à 1.
Le problème que j'ai eu alors est que, comme je dois entrer les données chaque jour, je n'ai pas envie (cfr. la paresse ci-dessus) de taper les "caractères inutiles" : "_00:00 01/01/05_" entre la date et la température. Je continue donc à entrer le date et l'heure normalement. Puis, j'exécute le script Perl ci-dessous pour créer un nouveau fichier de données, insérer ce qu'il faut où il faut et créer le graphique adéquat avec Gnuplot. Voici le script (TIMTOWTDI) :
-----8<-----
$file1 = "th.txt"; # original file with format "DD/MM/YY HH:MM"
$file2 = "th.txt2"; # target file with format "DD/MM/YY_00:00 01/01/06_HH:MM"
# open the files
open FILE1, "$file1"
or die "Cannot open $file1.\n";
open FILE2, ">$file2"
or die "Cannot open $file2\n";
# parse lines from $file1 and save them in $file2
while(!eof(FILE1))
{
$line = ;
$linedate = substr($line, 0, 8);
$linedate = $linedate . "_00:00 01/01/06_";
$therest = substr($line, -26);
$line = "$linedate$therest";
print FILE2 "$line";
}
# close files
close FILE1;
close FILE2;
# open pipe for Gnuplot
open(PLOT, "| gnuplot")
or die "Impossible to launch gnuplot\n";
print PLOT qq{set term png small\n};
print PLOT qq{set xdata time\n};
print PLOT qq{set ydata time\n};
print PLOT qq{set timefmt "\%d/\%m/\%y_\%H:\%M"\n};
print PLOT qq{set format x "\%m/\%y"\n};
print PLOT qq{set format y "\%H:\%M"\n};
print PLOT qq{set xrange ["01/01/03_00:00":"31/08/06_00:00"]\n};
print PLOT qq{set missing 'NaN'\n};
print PLOT qq{set out "th-hour.png"\n};
print PLOT qq{set title "Time of measurement, 2003 - 2006"\n};
print PLOT qq{set xlabel "Month/Year"\n};
print PLOT qq{set ylabel "Time (hour:minute)"\n};
print PLOT qq{set autoscale y\n};
print PLOT qq{plot 'th.txt2' using 1:2 notitle with lines\n};
print PLOT qq{reset\n};
close PLOT;
-----8<-----
- Un exemple de résultat : http://jepoirrier.free.fr/graphs/th-hour.png (sur pratiquement 3 ans)
- Le script : http://jepoirrier.free.fr/graphs/th-hour.pl
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.