Structure de la boucle à l’intérieur de gnuplot?

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 } 

http://www.gnuplotting.org/gnuplot-4-6-do/

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 ; }