2011-02-12 8 views
12

Quiero tener un solo archivo .plt que almacene los datos y los comandos gnuplot. Mis datos se parececómo hacer varias parcelas a partir de los mismos datos de entrada estándar en gnuplot?

# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 

y corresponde a dos parcelas: (x1, y1) y (x2, y2).

Sé que puedo utilizar como "-":

plot "-" using 1:2 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

Pero eso generaría una sola trama, es decir, (x1, y1). Estoy tratando de hacer algo como

plot "-" using 1:2, "-" using 3:4 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

pero obviamente eso no quiere trabajar desde gnuplot espera un nuevo conjunto de datos de la entrada estándar para la segunda "-".

Notas:

  1. no puedo cambiar el estilo de los datos. Viene en cuatro columnas.
  2. Parece que puedo hacerlo con reread pero eso requiere dos archivos. Realmente quiero un solo archivo.

Respuesta

7

No se puede hacer esto sin tener que modificar algo en la forma usted ingresa los datos. Al alimentar los datos de gnuplot a través de la entrada estándar, se espera que se delimiten múltiples conjuntos de datos con dos líneas en blanco entre ellos, o que se intercalen en líneas sucesivas. Las opciones son:

  • alimentar a los dos conjuntos de datos en diferentes comandos de la trama por completo.

  • cambiar el formato de archivo para que conjuntos de datos tienen líneas en blanco entre ellos, entonces todos ellos de referencia con índice de .

  • cambiar el formato de archivo para que líneas alternas representan diferentes conjuntos de datos , continuación, hacer referencia a todos con cada .

  • poner los datos en un archivo de , el guión trazado en otra, y después hacer referencia a los datos archivo más de una vez con diferentes usando cláusulas cada vez.

Hay una introducción a la cada y índice de comandos a partir de las How do I plot several data sets in a single file? Esas son las únicas instalaciones incorporadas en gnuplot para este tipo de cosas, y tampoco hace exactamente lo que preguntaba. es bueno que ya haya modificado el formato de los datos, porque esto no iba a funcionar nunca como esperaba originalmente.

+0

Gracias. Es bueno saber qué puede y qué no se puede hacer (aunque me gustaría que esto se pudiera hacer). Aunque he cambiado mi archivo, de alguna manera el código C++ generaría el formato original más rápido y me gustó más. De todos modos, solo una pregunta rápida: Aparentemente no puedo combinar '" - "' y 'every', ¿verdad? – Mahdiyar

+0

¿podría dar un ejemplo de cómo hacer esto? gnuplot lee (mientras hace la primera trama) hasta el final, no importa lo que haga. –

4

No estoy seguro de cuánto puede editar el archivo, pero la forma más ordenada es probablemente a poner todo en una secuencia de comandos shell script/lote (está usted en Linux o Windows?)

en Linux hago algo como esto

#!/bin/bash 

#put my data in a file 
echo " 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
" > my_dat.dat 

#launch gnuplot 
gnuplot<<EOF 
#gnuplot commands here 
set output "test.ps" 
set term postscript 

plot "my_dat.dat" u 1:2, \ 
    "my_dat.dat" u 3:4 

set term pop 
set output 

EOF 

# cleanup 
rm my_dat.dat 

Entonces chmod + WRX el archivo que puse los comandos anteriores y correr.

Nota: también parece ser una similitud a esta pregunta:

gnuplot stdin, how to plot two lines?

lo que es posible que desee ver allí también

+0

Gracias. Sí, estoy en Linux. En realidad, logré cambiar la manera en que se formatearon los datos modificando el código C++ que lo había generado. Entonces mi problema ya no está. Pero todavía tengo curiosidad de cómo uno podría hacerlo de modo que vería la trama con un solo archivo.plt en el formato anterior y emitiendo '$ gnuplot file.plt'. – Mahdiyar

+0

@Mahdiyar Sí, tengo curiosidad sobre eso también. Usar gnuplot con scripting es la manera habitual en que creo (también puede llamar a su programa C++ desde el shell haciendo que todo funcione con 1 línea), consulte - http://t16web.lanl.gov/Kawano/gnuplot/intro/working -e.html para más información sobre esto. – Tom

+2

Me gusta este método de script de shell, ya que solo quiero que mi aplicación genere un único archivo trazable. Para mantener limpio el sistema de archivos, use el comando bash tempfile: 'tmpFile = \' tempfile \ '' y luego en el comando de trazado use 'plot" $ tmpFile "1: 2 ...' –

1

Sé que esto es una entrada antigua, pero me gustaría señalar a otra estrategia en caso de que alguien todavía lucha con este tema:

También puede utilizar el comando trazado y la entrada de los datos dos veces, como:

plot "-" using 1:2, "-" using 3:4 
# 1 2 3 4 
    5 6 7 8 
    e 
    1 2 3 4 
    5 6 7 8 
    e 

Gnuplot en realidad esperará dos bloques en este caso. Me parece muy útil cuando no quiero cambiar los comandos y cuando estoy alimentando Gnuplot por tubería. En un escenario en tiempo real (dependiendo del tamaño de los datos) es muy probable que sea aún más rápido que el almacenamiento en búfer en un archivo en el disco duro.

En mi experiencia, la cantidad de código requerido para almacenar los datos en su secuencia de comandos, que se requiere para canalizar más de una vez, es muy baja.

2

Nueva opción ya gp5.0 (véase también help inline data):

$dataset << EOD 
1 2 3 4 
5 6 7 8 
EOD 

plot $dataset using 1:2, $dataset using 3:4 
Cuestiones relacionadas