Estructura de bucle dentro de gnuplot?

¿Hay alguna forma de recuperar iterativamente datos de múltiples archivos y trazarlos en el mismo gráfico en gnuplot? Supongamos que tengo archivos como data1.txt, data2.txt …… data1000.txt; cada uno tiene el mismo número de columnas. Ahora podría escribir algo como-

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" 

Pero esto sería realmente inconveniente. Me preguntaba si hay una forma de recorrer la parte de la ttwig en gnuplot.

Seguro que está (en gnuplot 4.4+):

 plot for [i=1:1000] 'data'.i.'.txt' using 1:2 title 'Flow '.i 

La variable i se puede interpretar como una variable o una cadena, por lo que podría hacer algo como

 plot for [i=1:1000] 'data'.i.'.txt' using 1:($2+i) title 'Flow '.i 

si quieres que las líneas se compensen entre sí.

Escriba la help iteration en la línea de comando gnuplot para obtener más información.

También asegúrese de ver la respuesta de @DarioP sobre el do for syntax; eso te da algo más cerca de un bucle for tradicional.

Eche un vistazo también al comando do { ... } desde gnuplot 4.6 ya que es muy poderoso:

 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/

Tengo el script all.p

 set ... ... list=system('ls -1B *.dat') plot for [file in list] file wlu 1:2 t file 

Aquí las dos últimas filas son literales, no heurísticas. Entonces corro

 $ gnuplot -p all.p 

Cambie *.dat al tipo de archivo que tiene, o agregue tipos de archivos.

Siguiente paso: agrega a ~ / .bashrc esta línea

 alias p='gnuplot -p ~/./all.p' 

y ponga su archivo all.p int en su directorio de inicio y listo. Puede trazar todos los archivos en cualquier directorio escribiendo p y enter.

EDITAR Cambié el comando, porque no funcionó. Anteriormente contenía la list(i)=word(system(ls -1B *.dat),i) .

Quería usar comodines para trazar múltiples archivos, a menudo colocados en diferentes directorios, mientras trabajaba desde cualquier directorio. La solución que encontré fue crear la siguiente función en ~/.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 } 

y plo *.dat ../../dir2/*.out , por ejemplo, como plo *.dat ../../dir2/*.out , para trazar todos los archivos .dat en el directorio actual y todos los archivos .out en un directorio que resulte ser un nivel superior y se denomina dir2 .

Aquí está el comando alternativo:

 gnuplot -p -e 'plot for [file in system("find . -name \\*.txt -depth 1")] file using 1:2 title file with lines' 

Utilice lo siguiente si tiene columnas discretas para trazar en un gráfico

 do for [indx in "2 3 7 8"] { column = indx + 0 plot ifile using 1:column ; }