2012-11-27 8 views
13

Wykreślam dane z innego zakresu X i chcę zmienić yrange zgodnie z maksymalną i minimalną wartością danych w bieżącym zakresie X. Gdy używam GPVAL_Y_MAX i GPVAL_Y_MIN, wartości te odpowiadają maksimum i minimum całych danych, a nie tylko dane w zakresie.gnuplot: wartości maksymalne i minimalne w zakresie

Na przykład, dostępne są następujące dane:

1 3 
2 5 
3 8 
4 20 
5 30 

użyć następujący scenariusz:

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

W pierwszym wykresie ja je ustawić yrange w [3: 8] ale w drugim wątku yrange sholud będzie [3:30]. Jeśli używam coś jak

set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX] 

GPVAL_Y_MIN i GPVAL_Y_MAX mają tę samą wartość niezależnie od xrange.

Jakieś rozwiązanie?

+0

chciałbym po prostu użyć 'set yrange [*: *]' w celu osiągnięcia taki sam efekt. – SDsolar

Odpowiedz

10

Wybrane zmienne to GPVAL_DATA_Y_MIN i GPVAL_DATA_Y_MAX, które są wartością y-min/maks. Danych wykreślonych w pewnym zakresie. GPVAL_Y_MIN i GPVAL_Y_MAX są trochę mniej użyteczne, ponieważ zazwyczaj informują o krawędziach wykresu (na ogół wartości te rozciągają się nieco poza zmienne GPVAL_DATA..., ponieważ gnuplot pozostawia trochę miejsca między danymi a krawędzią wykresu).

Aby skorzystać z tych zmiennych trzeba użyć specyfikatorów zasięgu do polecenia działki:

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

Nawiasem mówiąc, specyfikacja u 1:2 jest zbędny, jeśli nie chcesz, aby przypomnieć sobie o kolumny, które spiskują , ponieważ wykreślenie pierwszych dwóch kolumn jako x i y jest domyślną wartością gnuplot. Jeśli nie chcesz Replot do terminala samej mocy (co nie jest pomocne w niektórych terminalach takich jak EPS gdzie replotting sprawia drugą stronę o tej samej działce), użyj tej sekwencji poleceń:

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' 

Zauważ użycie specyfikatora zakresu, tym razem z podanym zakresem ay. Jest to nieco bardziej kompaktowe niż określanie z set yrange, ale tworzy dłuższą linię kodu.

Jeśli masz gnuplot 4.6.0 lub wyższy, możesz skorzystać z polecenia stats, aby uniknąć powtórzenia. Komenda stats tworzy kilka zmiennych poręcznych

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

nieco innej komendy,

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

wypełni działkę w kierunku X na podstawie gdzie rzeczywiste leżą danych. Na przykład, jeśli masz punkty danych w {(1.1, 3), (2, 4), (2.9,5)}, zakres x zostanie ustawiony na [1.1: 2.9].

+0

Dziękuję bardzo! – josematamoros

+1

Aby być kompletnym: 'GPVAL_DATA _...' są nieudokumentowane (w 4.6, domyślne wydanie w Ubuntu 14.04), ale one istnieją, są wypełnione ** tylko ** po pierwszym wykresie danych. – kebs

+1

Z gnuplotem 5.0.6 (i prawdopodobnie przed tym wydaniem), nie jest to już 'stats_max_y', ale' STATS_max_y' (i odpowiednie zmiany nazw zmiennych). – kartoffelsalat

2

Ustawienie zmiennej na GPVAL_DATA_Y_MIN: GPVAL_DATA_Y_MAX ma tę wadę, że nie używa funkcji autoskalowania gnuplots, która rozszerza zakresy do następnego tic.

W automatycznego kreślenia dlatego wolę następujące

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 

ta działa również na działkach danych przedmiotu:

plot 'data.csv' u 1:(1.01*$2) 
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX] 
plot 'data.csv' u 1:2 
Powiązane problemy