fusionar varios archivos de datos para trazarlos en un solo gráfico

ampliando la pregunta que había hecho anteriormente, que se puede encontrar aquí, trazar múltiples coordenadas (x, y) en una sola curva con gnuplot. Estoy tratando de trazar las curvas bezier en gnuplot usando 2 archivos diferentes. Cada (x, y) del primer archivo forma una curva Bézier que pasa por los puntos del segundo archivo. El primer archivo tiene las coordenadas como las siguientes:

 x      y  
0.0    0.5     
0.12   0.1    
0.16   0.4    
0.2    0.35   
0.31   0.8    
0.34   0.6   
0.38   1.0    
0.46   0.2   
0.51   0.7    
0.69   0.9    

El segundo archivo tiene las siguientes coordenadas:

 x      y
0.00   0.7
0.04   0.74073082208
0.08   0.85926917792 
0.12   0.9 
0.16   0.9
0.2    0.9  
0.24   0.749720623086
0.28   0.874229601255
0.32   0.74073082208
0.36   0.8 
0.4    0.721178508605 
0.44   0.878821491395
0.48   0.761772990545
0.52   0.700774803388
0.56   0.723771273415
0.6    0.789508073675
0.64   0.864014272269
0.68   0.896743348931

Ahora, ¿cómo fusiono estos dos archivos para trazar un solo gráfico? Estos dos archivos no tienen el mismo número de filas, pero supongo que eso no importa. La primera curva estaría entre (x1, y1) y (x2, y2) desde el primer archivo que continuaría hasta (x10, y10). En la curva entre (x1, y1) y (x2, y2); los puntos (x1, y1), (x2, y2) y (x3, y3) del segundo archivo se encuentran.

Seguí este enlace http://t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html para ordenar y concatenar los dos archivos, pero obtuve algunas líneas extrañas, lo cual es totalmente incorrecto. Estos valores deberían trazar curvas de Bezier pero no obtener el gráfico. He escrito el siguiente script gnuplot para trazar los datos concatenados:

set term x11 persist
set title "Animation curves"
set xlabel "Time (secs.)"
set ylabel "Parameter"
set x2label "Phoneme1" offset -35
set pointsize 2
set key off
set style line 2 lt 0 lc 1 lw 2
set xrange [0.0:1.0]
set yrange [0.0:1.3]

plot [0.0:0.8] "< cat -n file1.dat" u 1:2 smooth csplines ls 1, "" u 1:(0.0):(0):(1.3) w vectors nohead ls 2, "" u ($1+0.005):(1):(sprintf("P %d", $0)) w labels, \
           "file1.dat" u 1:2 with points, \
           "file2.dat" u 1:2 with points, \    

Tuve el siguiente error:

plot "< cat -n file1.dat" u 1:2 smooth csplines ls 1, "" u 1:(0.0):(0):(1.3) w vectors    nohead ls 2, "" u ($1+0.005):(1):(sprintf("P %d", $0)) w labels, "file1.dat" u 1:2 with points, "file2.dat" u 1:2 with points,                  
                          ^
"plot.gp", line 21: Cannot smooth: no data within fixed xrange!

preguntado el 28 de agosto de 11 a las 00:08

Para comprobar si entiendo su pregunta: si tuviera los dos archivos en un solo archivo, simplemente trazaría los datos. La parte complicada es cómo hacer eso con gnuplot sin fusionar esos archivos de antemano. ¿Es eso correcto o hay "más" en ello? -

@Woltan Gracias por mirar mi pregunta. Finalmente obtuve una respuesta. Sí, eso es absolutamente correcto. Me siento estúpido por no poder pensar de esta manera. Si pudieran fusionarse en un solo archivo, gnuplot simplemente lo trazaría sin ningún problema. La cosa es que genero estos archivos en mi código Python. Entonces, si hay una forma en Python de fusionar dos archivos y ordenarlos en el archivo concatenado, eso funcionaría. -

Bueno, supongo que encontré la respuesta. Pero hasta donde yo sé, lo he intentado, pero lo intentaré de nuevo. Yo seguiría esto t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html -

Ahora lo recuerdo, ya había intentado esto ordenando y concatenando, pero esto no me dio los resultados correctos. Debería obtener las curvas Bézier de los datos, pero obtuve algunas líneas aleatorias, lo cual es incorrecto. -

Podría tener un problema al tener múltiples entradas, por ejemplo x=0.12. Ya que exporta eso con Python, ¿por qué no simplemente cambiar la rutina de exportación y escribir un archivo sin múltiples entradas? También podrías usar matplotlib -

1 Respuestas

El siguiente script funciona en mi máquina. Quizás esto es incluso lo que estás buscando ...

set term x11 persist
set title "Animation curves"
set xlabel "Time (secs.)"
set ylabel "Parameter"
set x2label "Phoneme1" offset -35
set pointsize 2
set key off
set style line 2 lt 0 lc 1 lw 2
set xrange [0.0:1.0]
set yrange [0.0:1.3]

plot [0.0:0.8] "< cat file1.dat file2.dat | sort -n" u 1:2 smooth csplines ls 1, \
                         "" u 1:(0):(0):2 w vectors nohead ls 2, \
                         "" u ($1 + 0.005):(1):(sprintf("P %d", $0)) w labels, \
                         "file1.dat" u 1:2 w p, \
                         "file2.dat" u 1:2 w p 

Respondido el 14 de Septiembre de 11 a las 15:09

Estaba pensando e intentando hacer una solución incorrecta. Aunque ahora no hay ningún error de sintaxis. Pero no está trazando el camino correcto. Solo debe trazar las curvas entre los puntos de file1.dat. Los datos de file2.dat son los puntos que se encuentran entre las curvas de file1.dat. - zingy

Me estaba confundiendo y pensé que esta solución estaba mal, pero de hecho el gráfico está absolutamente bien. Lo que está mal es etiquetar y dibujar vectores. Aquí esto sucede con los datos de ambos archivos. Pero eso debería ser solo para file1.dat. es posible? - zingy

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.