2012-11-27 25 views
13

Sto analizzando alcuni dati con un intervallo X diverso e vorrei cambiare l'intervallo in base al valore massimo e minimo dei dati nell'intervallo X corrente. Quando utilizzo GPVAL_Y_MAX e GPVAL_Y_MIN, questi valori corrispondono al massimo e al minimo dell'intero dato, non solo ai dati dell'intervallo.gnuplot: valori massimi e minimi in un intervallo

Ad esempio, ho i seguenti dati:

1 3 
2 5 
3 8 
4 20 
5 30 

Io uso il seguente script:

plot 'data.txt' u 1:2; 
set xrange [1:3]; 
replot 
set xrange [1:5]; 
replot 

Nel primo grafico vorrei impostare yrange in [3: 8], ma nella seconda trama lo shrange deve essere [3:30]. Se uso qualcosa come

set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX] 

GPVAL_Y_MIN e GPVAL_Y_MAX avere lo stesso valore indipendentemente dalla xrange.

Qualsiasi soluzione?

+0

Vorrei solo usare 'yrange impostare [*: *]' per ottenere la stesso effetto. – SDsolar

risposta

10

Le variabili desiderate sono GPVAL_DATA_Y_MIN e GPVAL_DATA_Y_MAX, che sono il valore y-min/max dei dati tracciati in un determinato intervallo. GPVAL_Y_MIN e GPVAL_Y_MAX sono un po 'meno utili in genere perché indicano dove sono i bordi del bordo di stampa (in generale questi valori si estendono leggermente oltre le variabili GPVAL_DATA... poiché gnuplot lascia un piccolo spazio tra i dati e il bordo del grafico).

Per sfruttare queste variabili si devono utilizzare gli specificatori raggio per il comando plot:

plot [1:3] 'data.txt' 
set yr [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX] 
replot 
... 

Tra l'altro, la specifica u 1:2 è ridondante se non si vuole ricordare a voi stessi di cui colonne si sta tramando , dal momento che il tracciamento delle prime due colonne come xey è il default di gnuplot. Se non si desidera ritracciare al terminale stessa uscita (che non è utile in alcuni terminali come eps cui nuova rappresentazione del grafico rende una seconda pagina con la stessa trama), utilizzare questa sequenza di comandi:

set terminal unknown 
plot [1:3] 'data.txt' 
set terminal <actual output terminal here> 
set output 'output.trm' 
plot [1:3][GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX] 'data.txt' 

Si noti l'uso dello specificatore di intervallo di nuovo, questa volta con un intervallo specificato. Questo è un po 'più compatto rispetto alla specifica con set yrange, ma crea una riga di codice più lunga.

Se si dispone di gnuplot 4.6.0 o versione successiva, è possibile utilizzare il comando stats per evitare la sostituzione. Il comando stats crea un gruppo di variabili a portata di mano

stats [1:3] 'data.txt' 
plot [1:3][stats_min_y:stats_max_y] 'data.txt' 

un comando leggermente diverso,

stats [1:3] 'data.txt' 
plot [stats_min_x:stats_max_x][stats_min_y:stats_max_y] 'data.txt' 

colmerebbe la trama nella direzione x in base a dove la menzogna dati effettivi. Ad esempio, se disponi di punti dati su {(1.1, 3), (2, 4), (2.9.5)}, l'intervallo x sarà impostato su [1.1: 2.9].

+0

Grazie mille! – josematamoros

+1

Solo per essere completi: 'GPVAL_DATA _...' non sono documentati (in 4.6, versione predefinita in Ubuntu 14.04), ma esistono, sono popolati ** solo ** dopo il primo grafico di dati. – kebs

+1

Con gnuplot 5.0.6 (e possibilmente prima di quella versione), non è più 'stats_max_y' ma' STATS_max_y' (e il nome della variabile corrispondente cambia). – kartoffelsalat

2

Impostazione di Yrange su GPVAL_DATA_Y_MIN: GPVAL_DATA_Y_MAX ha lo svantaggio di non utilizzare la funzionalità di scalabilità automatica di gnuplots che estende gli intervalli al tic successivo.

In tracciamento automatico pertanto preferisco il seguente

f(x)=sin(x)>0.5? 1:-1 #example function 

set ytics 0.2 
plot 1.01*f(x) # dummy plot to set GPVAL_* 
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX] 

plot f(x) # actual plot 

Questo funziona anche per i grafici dei dati, naturalmente:

plot 'data.csv' u 1:(1.01*$2) 
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX] 
plot 'data.csv' u 1:2 
Problemi correlati