93 votes

gnuplot : tracer les données de plusieurs fichiers d'entrée dans un seul graphique

J'essaie de tracer un graphique à l'aide de gnuplot. Je dispose de six fichiers texte. Chaque fichier texte contient deux colonnes. La première colonne représente le temps en secondes (un nombre à virgule flottante). La seconde est un numéro de séquence. Je veux tracer le graphique du temps en fonction du numéro de séquence dans un seul graphique pour les six fichiers. J'utilise ce fichier pour ce faire.

set terminal png
set output 'akamai.png'

set xdata time
set timefmt "%S"
set xlabel "time"

set autoscale

set ylabel "highest seq number"
set format y "%s"

set title "seq number over time"
set key reverse Left outside
set grid

set style data linespoints

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

Où sont mes fichiers :

  • print_1012720
  • print_1058167
  • print_193548
  • print_401125
  • print_401275
  • print_401276

Il donne une erreur étrange comme ci-dessous :

"plot.plt", ligne 24 : variable indéfinie : plot

Est-ce que je fais quelque chose de mal ? Est-il possible de tracer les données d'entrée de différents fichiers dans le même graphique ?

0 votes

Soyez malin, allez sur ce sujet stackoverflow.com/questions/14946530/

145voto

mgilson Points 92954

Tu es si proche !

Changement

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

a

plot "print_1012720" using 1:2 title "Flow 1", \
     "print_1058167" using 1:2 title "Flow 2", \
     "print_193548"  using 1:2 title "Flow 3", \ 
     "print_401125"  using 1:2 title "Flow 4", \
     "print_401275"  using 1:2 title "Flow 5", \
     "print_401276"  using 1:2 title "Flow 6"

L'erreur survient parce que gnuplot essaie d'interpréter le mot "plot" comme le nom de fichier à tracer, mais vous n'avez assigné aucune chaîne à une variable nommée "plot" (ce qui est bien - ce serait super confus).

81voto

Richard Points 5991

Vous pouvez trouver que les boucles for de gnuplot sont utiles dans ce cas, si vous ajustez vos noms de fichiers ou vos titres de graphiques de manière appropriée.

par exemple

filenames = "first second third fourth fifth"
plot for [file in filenames] file."dat" using 1:2 with lines

et

filename(n) = sprintf("file_%d", n)
plot for [i=1:10] filename(i) using 1:2 with lines

6 votes

Je sais que c'est vieux, mais merci d'avoir ajouté cette solution alternative. Je ne connaissais pas les boucles dans gnuplot, et c'est une fonctionnalité étonnante.

0 votes

En supposant une convention de nom de fichier normale (nom.dat), je pense que cela devrait être fichier.".dat". Le premier . concatène le nom de fichier à "dat" mais n'est pas inclus dans le nom de fichier réellement utilisé dans la commande de traçage.

0 votes

Comment puis-je tracer tous les fichiers d'un répertoire sans écrire explicitement leurs noms ? ( stackoverflow.com/q/29969393/855050 )

30voto

Ciro Santilli Points 3341

replot

C'est un autre moyen d'obtenir plusieurs parcelles en même temps :

plot file1.data
replot file2.data

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X