Подтвердить что ты не робот

Gnuplot: максимальное и минимальное значения в диапазоне

Я рисую некоторые данные с другим диапазоном X, и я хотел бы изменить yrange в соответствии с максимальным и минимальным значением данных в текущем диапазоне X. Когда я использую GPVAL_Y_MAX и GPVAL_Y_MIN, эти значения соответствуют максимальному и минимальному количеству всех данных, а не только данным в диапазоне.

Например, у меня есть следующие данные:

1 3
2 5
3 8
4 20
5 30

Я использую следующий script:

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

В первом графике я хотел бы установить yrange в [3: 8], но на втором графике yrange sholud будет [3:30]. Если я использую что-то вроде

set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]

GPVAL_Y_MIN и GPVAL_Y_MAX имеют одно и то же значение независимо от xrange.

Любое решение?

4b9b3361

Ответ 1

Переменные, которые вы хотите, это GPVAL_DATA_Y_MIN и GPVAL_DATA_Y_MAX, которые представляют собой y-min/max данных, построенных в определенном диапазоне. GPVAL_Y_MIN и GPVAL_Y_MAX немного менее полезны, потому что они сообщают вам, где находятся грани границы графика (в общем, эти значения немного отличаются от переменных GPVAL_DATA..., поскольку gnuplot оставляет небольшое пространство между данными и край графика).

Чтобы воспользоваться этими переменными, вы должны использовать спецификаторы диапазона для команды plot:

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

Кстати, спецификация u 1:2 избыточна, если вы не хотите напомнить себе о том, какие столбцы вы планируете, так как построение первых двух столбцов как x и y является стандартом gnuplot. Если вы не хотите выполнять ретрансляцию на один и тот же выходной терминал (что не помогает в некоторых терминалах, таких как eps, где повторная запись делает вторую страницу с одним и тем же графиком), используйте следующую последовательность команд:

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'

Обратите внимание на использование спецификатора диапазона снова, на этот раз с указанным диапазоном y. Это немного компактнее, чем указание с помощью set yrange, но делает более длинную строку кода.

Если у вас есть gnuplot 4.6.0 или выше, вы можете воспользоваться командой stats, чтобы избежать повторной установки. Команда stats создает кучу удобных переменных

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

Несколько другая команда,

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

Заполним график в направлении х, основываясь на том, где лежат фактические данные. Например, если у вас были точки данных в {(1.1, 3), (2, 4), (2.9,5)}, диапазон x был бы установлен в [1.1: 2.9].

Ответ 2

Установка yrange в GPVAL_DATA_Y_MIN: у GPVAL_DATA_Y_MAX есть недостаток, заключающийся в том, что не используется функция gnuplots autoscaling, которая расширяет диапазон до следующего tic.

В автоматическом построении я поэтому предпочитаю следующее

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

Это также работает для графиков данных, конечно:

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

Ответ 3

Я использую это так, чтобы определить диапазон х для функции

plot [0:5] sin(10*x) + cos(3*x)

Кроме того, вы можете установить диапазон перед построением

set xrange [0:5]
plot sin(10*x) + cos(3*x)

enter image description here