Obtenga una proporción de 2 archivos en gnuplot

Tengo 2 archivos dat:

a.dat #Xs 100 25 200 56 300 75 400 67 b.dat #Xs 100 65 200 89 300 102 400 167 

Quiero dibujar un gráfico en el gnuplot donde los valores de yy son una relación entre los valores de a.dat y b.dat, respectivamente. por ejemplo, 25/65, 56/89, 75/102 y 67/167.

¿Cómo hago esto? Solo sé hacer una ttwig como esta, y no con la relación.

 plot "a.dat" using 1:2 with linespoints notitle "b.dat" using 1:2 with linespoints notitle 

No puede combinar los datos de dos archivos diferentes en una sola statement de using . Debe combinar los dos archivos con una herramienta externa.

La forma más fácil es usar paste :

 plot '< paste a.dat b.dat' using 1:($2/$4) with linespoints 

Para una solución independiente de la plataforma, podría usar, por ejemplo, la siguiente secuencia de comandos python, que en este caso hace lo mismo:

 """paste.py: merge lines of two files.""" import sys if (len(sys.argv) < 3): raise RuntimeError('Need two files') with open(sys.argv[1]) as f1: with open(sys.argv[2]) as f2: for line in zip(f1, f2): print line[0].strip()+' '+line[1], 

Y luego llama

 plot '< python paste.py a.dat b.dat' using 1:($2/$4) w lp 

(ver también Gnuplot: trazar el máximo de dos archivos )

La respuesta corta es que … no puedes. Gnuplot procesa un archivo a la vez.

La solución alternativa es usar una herramienta externa, por ejemplo, usar el shell si tiene un estilo unix o gnuplot.

join file1 file2 > merged_file le permitirá fusionar sus archivos con bastante facilidad si la primera columna es idéntica en ambos archivos. Las opciones permiten unirse a otras columnas y administrar los datos que faltan en cualquier archivo.

En caso de que no haya una columna común pero el número de línea sea relevante, paste lo hará.

Hay un truco si los dos conjuntos de datos no encajan (muestreo diferente en x), pero tiene un buen modelo matemático para al menos uno de ellos:

 fit f2(x) data2 us 1:2 via ... set table $corr plot data1 using 2:(f2($1)) unset table plot $corr using 1:2 

Esto, por supuesto, no tiene sentido si ambos conjuntos de datos tienen el mismo conjunto de variables independientes, porque simplemente puede combinarlos (ver otras respuestas).