2012-06-29 19 views
9

¿Cómo puedo limitar la autoescala de gnuplot, para que, como ejemplo para y-max, tenga al menos un cierto valor y se autoestructure hasta un "límite" fijo?Límites mínimo y máximo de Gnuplot para autoescalar

Al mirar la documentación, solo veo cómo arreglar el eje mínimo o máximo, mientras que el otro se escala automáticamente.

About autoscaling on PDF page 93

+0

¿Podría aclarar a qué se refiere con autoescalar? ¿Desea establecer el ymax en un determinado valor, o desea escalar los datos para que su valor máximo tenga un cierto valor? – andyras

+0

@andyras Ejemplo para ymax: el mínimo (de ymax) podría ser 100 y máximo 1000. Si el punto de datos más alto es 50, el ymax sería 100. Se escalaría automáticamente para valores de hasta 1000. Después de eso, los valores sería cortado. – varesa

Respuesta

18

Desde la versión 4.6 gnuplot ofrece una nueva sintaxis para especificar límites superior e inferior para la autoescala. Para su caso se podría utilizar

set xrange [0:100 < * < 1000] 

Citando de la documentación:

El rango en el que se está realizando autoscaling puede estar limitado por un límite inferior <lb> o un límite o ambos <ub> superior. La sintaxis es

{ <lb> < } * { < <ub> } 

Por ejemplo

0 < * < 200 

conjuntos <lb> = 0 y <ub> = 200.

Esa sintaxis se puede aplicar al valor mínimo o máximo de set *range.

Para autoescala xmin pero manteniendo una actitud positiva, utilizar

set xrange [0<*:] 

Para autoescala x pero mantener la distancia mínima de 10 a 50:

set xrange [*<10:50<*] 

Consulte la documentación sobre set xrange para más información.

4

no creo que sea posible, ya sea que tenga autoscaling en no-, min- o max-, o ambos ejes es decir .:

set yrange [FIXED_MIN : FIXED_MAX] 
set yrange [  * : FIXED_MAX] 
set yrange [FIXED_MIN :   *] 
set yrange [  * :   ] 

respectivamente.

+0

Parece que realmente fue así, en lugar de ser incapaz de encontrarlo. Parece que tengo que escalar manualmente usando los datos – varesa

4

En este caso, se puede filtrar los datos y dejar que gnuplot hacer es normal escala automática:

set yrange [*:*] 
plot 'mydatafile' u 1:(($2 >= YMIN && $2 <= YMAX) ? $2 : 1/0) 
+0

Eso es más o menos lo que hice (pero fuera de gnuplot). Lo siento si leo mal el código, pero eso deja fuera cada valor por debajo de YMIN? Es posible que haya malinterpretado un poco lo que quería (por ejemplo, Ymin = 0, Ymax = 100-1000). Lo resolví agregando un único punto de datos, con el color de fondo (por lo que es invisible) en YMIN. Eso me dio el efecto que quería. – varesa

+1

@varesa - Si está usando gnuplot 4.6, también existe el comando 'stats' que puede emparejar el filtro anterior y las variables definidas por gnuplot:' GPVAL_YMIN' y 'GPVAL_XMIN', pero ahora estamos empezando a obtener un poco más complicado. el punto "invisible" es una idea interesante, sin embargo, me gusta. – mgilson

+0

@mgilson Gnuplot 4.6 agregó incluso una nueva sintaxis para tales límites superior e inferior en autoescalado, como 'establecer xrange [0: 100 <* <1000]'. – Christoph

1

Dado que las personas parecen estar interesados ​​en esta pregunta, voy a añadir la forma en que lo resolvió como una respuesta:

Hice el mínimo para la autoescalada al insertar un marcador invisible al comienzo de los datos. Eso causa que el argumento siempre lo "muestre", aunque no se puede ver.

Entonces implementó el exterior máximo de gnuplot (además probablemente podría haber sido posible su interior, así, echar un vistazo a la respuesta de mgilson), en un script analizador que he utilizado para preparar los datos para gnuplot.

De hecho, en el script tomé todos los valores recortados, los agregué a y = 0 y los hice rojos. De esa forma recibo una "advertencia", de que los valores son demasiado grandes para ser sensatos al gráfico. (Mi programa monitorea pings entre dos hosts, y no tiene sentido intentar graficar 5s + latencias => Lo marco como conexión rota)

Cuestiones relacionadas