splot examples example gnuplot

examples - gnuplot legend



datos de trazado de tuberías a guión gnuplot (6)

Quiero crear un gnuplot con tres gráficos en él. Los datos deben estar en línea (como quiero solo

Debe tener un aspecto como este:

Actualmente estoy usando la siguiente secuencia de comandos gnuplot para crear la trama:

set terminal png set output "test.png" plot for[col=2:4] "data.txt" using 1:col title columnheader(col) with lines

El archivo data.txt es:

Generation Best Worst Average 0 2 1 0 1 3 1 2 2 4 3 3 3 4 3 3 4 6 3 4 5 7 4 5 6 9 6 7 7 10 6 9 8 10 5 6 9 11 6 8 10 12 7 9

Me gustaría canalizar el data.txt en gnuplot y no confiar en el archivo de datos de referencia en el script. Algo como cat data.txt | gnuplot plot.gnu cat data.txt | gnuplot plot.gnu . La razón de esto es que tengo varios archivos data.txt y no quiero crear un archivo plot.gnu para cada uno de estos.

Leí sobre el archivo especial ''-'' en este hilo de stackoverflow y leí sobre varias gráficas en un archivo . Sin embargo, esto requeriría incluir los datos con el código gnuplot, que no está limpio.


¿Qué hay de malo en usar la opción -e de gnuplot desde el shell? Puede proporcionar una variable como entrada, por ejemplo, data.txt, desde shell utilizando:

gnuplot -e "filename=''data.txt'';ofilename=''test.png''" plot.gnu

Debería poder llamar al comando anterior varias veces con diferentes valores para "nombre de archivo" desde el shell utilizando un bucle for.

Y luego cambia su guión plot.gnu a:

set terminal png set output ofilename plot for[col=2:4] filename using 1:col title columnheader(col) with lines


¿Qué hay de usar el comando system ()?

set terminal png set output "test.png" # read shell input # the echo prints the variable, which is then piped to gnuplot fname = system("read filename; echo $filename") plot for[col=2:4] fname using 1:col title columnheader(col) with lines

Puedes llamarlo ahora con

echo "data.txt" | gnuplot script.gp


Mezcla ambas respuestas:

cat data.txt | gnuplot -e "set terminal png; set output "test.png"; plot for[col=2:4] ''<cat'' using 1:col title columnheader(col) with lines


No es una respuesta directa, pero esto es lo que uso para mirar rápidamente los datos. Es especialmente útil con el comando de cut

cat data.txt | cut -f2 -d'' '' | gnuplot -p -e "plot ''<cat''"


Si desea trazar los datos que provienen de una tubería más de una vez, debe almacenarlos de alguna manera en la memoria. Mi forma preferida es usar un archivo temporal en /dev/shm , que existe en la mayoría de los sistemas Linux y se asigna a la RAM. Solo para mantener las cosas limpias, puse una trampa para eliminar el archivo temporal al salir.

Ejemplo (usando tu data.txt):

cat data.txt | (cat > /dev/shm/mytempfile && trap ''rm /dev/shm/mytempfile'' EXIT && gnuplot -e "set terminal dumb; plot for[col=2:4] ''/dev/shm/mytempfile'' using 1:col title columnheader(col) with lines")

Resultado:

12 ++------------+-------------+-------------+-------------+------------** + + + + + Best ****** + | Worst***#### | 10 ++ *******Average $$$$$$++ | **** | | *** $$$$ $$$$ 8 ++ ** $$ $$ $$$$$ ++ | ** $$ $$ $$ | | ***** $$$ $$ #### 6 ++ **** $$ ############# $$ ##### ++ | ** $$ ## # #### | | ** $$$ ## ## | | ** $$$$ ## | 4 ++ *********** $$$$$ #### ++ | ***** ################### | | **** $$## | 2 ** $$$## ++ ######### | + $$ + + + + + 0 $$------------+-------------+-------------+-------------+------------++ 0 2 4 6 8 10


Si estás en un sistema Unix (es decir, no en Windows) puedes usar ''<cat'' lugar de ''-'' para leer desde stdin:

plot ''<cat'' using ...

Entonces puedes hacer cat data.txt | gnuplot script.gp cat data.txt | gnuplot script.gp . Sin embargo, en el caso específico que menciona en su pregunta, con el gráfico en el bucle for, lea la entrada tres veces. Por lo tanto, enviar los datos a través de la entrada estándar no es apropiado, ya que los datos desaparecerán después de la primera lectura.