Pregunta 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 el trama parte en gnuplot.


74
2018-02-18 22:32


origen


Respuestas:


Seguro que está (en gnuplot 4.4+):

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

La variable i puede interpretarse 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í.

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

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


85
2018-02-18 23:18



Eche un vistazo también a la do { ... } comando 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/


73
2017-07-26 14:53



Tengo el script all.p

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

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

$ gnuplot -p all.p

Cambio *.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 pon tu 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 list(i)=word(system(ls -1B *.dat),i).


8
2018-01-30 15:32



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="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
}

y úselo, p. me gusta plo *.dat ../../dir2/*.out, para trazar todo .dat archivos en el directorio actual y todo .out archivos en un directorio que pasa a ser un nivel arriba y se llama dir2.


1
2018-01-21 01:24



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'

0
2018-02-13 14:29



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

0
2018-05-13 22:53