Existe-t-il un moyen de récupérer itérativement les données de plusieurs fichiers et de les tracer sur le même graphique dans gnuplot. Supposons que j’ai des fichiers comme data1.txt, data2.txt …… data1000.txt; chacun ayant le même nombre de colonnes. Maintenant je pourrais écrire quelque chose comme-
plot "data1.txt" using 1:2 title "Flow 1", \ "data2.txt" using 1:2 title "Flow 2", \ . . . "data1000.txt" using 1:2 title "Flow 6"
Mais ce serait très gênant. Je me demandais s’il y avait un moyen de parcourir la partie du complot dans gnuplot.
Il est certain (dans gnuplot 4.4+):
plot for [i=1:1000] 'data'.i.'.txt' using 1:2 title 'Flow '.i
La variable i
peut être interprétée comme une variable ou une chaîne, vous pouvez donc faire quelque chose comme
plot for [i=1:1000] 'data'.i.'.txt' using 1:($2+i) title 'Flow '.i
si vous voulez avoir des lignes décalées les unes des autres.
Tapez help iteration
sur la ligne de commande gnuplot pour plus d’informations.
Veillez également à consulter la réponse de @DarioP à propos de la syntaxe; cela vous donne quelque chose de plus proche d’une boucle traditionnelle.
Jetez également un coup d’œil à la commande do { ... }
depuis gnuplot 4.6 car elle est très puissante:
do for [t=0:50] { outfile = sprintf('animation/bessel%03.0f.png',t) set output outfile splot u*sin(v),u*cos(v),bessel(u,t/50.0) w pm3d ls 1 }
J’ai le script all.p
set ... ... list=system('ls -1B *.dat') plot for [file in list] file wlu 1:2 t file
Ici, les deux dernières lignes sont littérales et non heuristiques. Puis je cours
$ gnuplot -p all.p
Remplacez *.dat
par le type de fichier que vous avez ou ajoutez des types de fichiers.
Etape suivante: Ajouter à ~ / .bashrc cette ligne
alias p='gnuplot -p ~/./all.p'
et mettez votre fichier all.p
votre répertoire personnel et le tour est joué. Vous pouvez tracer tous les fichiers dans n’importe quel répertoire en tapant p et entrez.
EDIT J’ai changé la commande, car cela ne fonctionnait pas. Auparavant, il contenait la list(i)=word(system(ls -1B *.dat),i)
.
Je voulais utiliser des caractères génériques pour tracer plusieurs fichiers souvent placés dans des répertoires différents, tout en travaillant à partir de n’importe quel répertoire. La solution que j’ai trouvée consistait à créer la fonction suivante dans ~/.bashrc
plo () { local arg="wl" local str="set term wxt size 900,500 title 'wild plotting' set format y '%g' set logs plot" while [ $# -gt 0 ] do str="$str '$1' $arg," shift done echo "$str" | gnuplot -persist }
et l’utiliser, par exemple, comme plo *.dat ../../dir2/*.out
, pour tracer tous les fichiers .dat
dans le répertoire courant et tous les fichiers .out
dans un répertoire qui se trouve être un niveau supérieur et appelé dir2
.
Voici la commande alternative:
gnuplot -p -e 'plot for [file in system("find . -name \\*.txt -depth 1")] file using 1:2 title file with lines'
Utilisez ce qui suit si vous avez des colonnes discrètes à tracer dans un graphique
do for [indx in "2 3 7 8"] { column = indx + 0 plot ifile using 1:column ; }