Existe-t-il un moyen de récupérer de manière itérative les données de plusieurs fichiers et de les tracer sur le même graphique dans gnuplot. Supposons que j'ai des fichiers tels que 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 vraiment gênant. Je me demandais s'il y avait un moyen de parcourir en boucle la partie plot de gnuplot.
Il existe bien (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.
Assurez-vous également de voir la réponse de @ DarioP à propos du do for
syntaxe; cela vous donne quelque chose de plus proche d'une boucle traditionnelle for
.
Jetez également un coup d'œil au do { ... }
commande depuis gnuplot 4.6 car il est très puissant:
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 w l u 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.
Prochaine étape: Ajouter à ~/.bashrc cette ligne
alias p='gnuplot -p ~/./all.p'
et mettez votre fichier all.p
dans votre répertoire personnel et le tour est joué. Vous pouvez tracer tous les fichiers de n'importe quel répertoire en tapant p et entrer.
EDIT J'ai changé la commande, car cela ne fonctionnait pas. Auparavant, il contenait list(i)=Word(system(ls -1B *.dat),i)
.
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 ;
}
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="w l"
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 .dat
fichiers dans le répertoire en cours et tous les .out
fichiers dans un répertoire de niveau supérieur 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'