Linux

Trucos En Gnuplot


GNUplot y Xfig

5 de Octubre, 2016

Exportar un gráfico de GNUplot a formato Xfig

Guardar el grafico en la terminal "fig":

 set terminal fig
 set output "myfigure.fig"
 plot x, x**2

Abrir el archivo con "myfigure.fig" con Xfig.

CICLO FOR

5 de Junio, 2016

GRAFICAR MUCHOS ARCHIVOS

Si tenemos muchos archivos, digamos, data1.txt, data2.txt, ..., data1000.txt, y queremos graficarlos todos, en principio tendríamos que escribir

 plot "data1.txt" using 1:2 title "Data 1", \
      "data2.txt" using 1:2 title "Data 2", \
      .
      .
      .
     "data1000.txt"  using 1:2 title "Data 1000"

Sin embargo, podemos compactar esto con un ciclo for:

 plot for [j=0:1000:100] sprintf('data%i.dat',j) u 1:4 w l t sprintf('Data %i',j)

En este ejemplo, j va tomando valores de 100 en 100, desde 0 a 1000, por lo que obtendremos 10 gráficos. Tambien podemos buscar los archivos con el comando ls a traves del comando system de la terminal:

plot for [j in system('ls HHe0*/E.dat')] sprintf('%s',j) w lp  t  sprintf('%s',j)

Los usuarios de VASP pueden encontrar util el siguiente comando:

plot for [j in "08 12 16 24 32"] sprintf("<awk '/LOOP\\+/{print}' Simulation-%s/OUTCAR",j)  u 0:7 w lp  t sprintf('Simulation-%s.dat',j)

5 de Junio, 2016

GRAFICAR MULTIPLES TABLAS CONTENIDAS EN UN SOLO ARCHIVO

Consideremos un archivo con la siguiente estructura:

 # x   f(x)
  0.1  0.0998334
  0.2  0.198669
  0.3  0.29552
  # x   f(x)
  0.1  0.891207
  0.2  0.932039
  0.3  0.963558
  .
  .
  .
  # x   f(x)
  0.1  -0.625071
  0.2  -0.699875
  0.3  -0.767686

Si cada bloque corresponde a f(x) en cierto paso de tiempo, tendríamos que dividir este archivo en varios archivos diferentes, para graficarlos con

 plot "data1.txt" using 1:2 title "Block 1", \
      "data2.txt" using 1:2 title "Block 2", \
      .
      .
      .
     "data1000.txt"  using 1:2 title "Block 6"

Para evitar esto, y hacerlo todo de una vez, directamente desde el archivo original, extraemos cada bloque con awk desde gnuplot mediante una función. Luego, hacemos un for para llamar a la función con distintos argumentos:

 filename(b,j) = sprintf("<awk 'NR>%i*%i && NR<=%i*(%i+1){print}' temp.dat", b,j,b,j)
 plot for[j=0:900:300] filename(4,j) u 1:2 w lp t sprintf("Block %i",j)

La variable b de la función filename representa el tamaño de cada bloque en el archivo (4 en este caso), mientras que j representa el número del bloque (primero, segundo, etc.). Notar que el ciclo for puede iniciarse en cualquier valor (j=0), finalizar en cualquier valor (j=900), con un incremento cualquiera (300 en este caso). Para este ejemplo, se harán 4 gráficos: para j=0, j=300, j=600, j=900.