Вопрос по gnuplot, plot, scaling, autoscaling – Gnuplot минимальные и максимальные границы для автомасштабирования

12

Как я могу ограничить автоматическое масштабирование gnuplot, чтобы, в качестве примера для y-max, это было как минимум определенное значение, и оно автоматически масштабировалось до фиксированного значения "limit"?

Просматривая документацию, я вижу только то, как зафиксировать мин или макс конец оси, в то время как другой масштабируется автоматически.

Об автомасштабировании на странице PDF 93

Не могли бы вы уточнить, что вы подразумеваете под автомасштабированием? Вы хотите установить ymax на определенное значение, или вы хотите масштабировать данные так, чтобы их максимум имел определенное значение? andyras
@andyras Пример для ymax: минимум (из ymax) может быть 100, а максимум 1000. Если самая высокая точка данных равна 50, ymax будет 100. Он будет автоматически масштабироваться для значений до 1000. После этого значения будут быть вырезанным. varesa

Ваш Ответ

4   ответа
5

Я не думаю, что это возможно, либо у вас есть автоматическое масштабирование по no-, min- или max-, либо по обеим осям, т.е.

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

Соответственно.

Так что кажется, что это действительно так, скорее, я не смог его найти. Кажется, я должен масштабировать вручную, используя данные varesa
1

Поскольку люди, кажется, интересуются этим вопросом, я добавлю способ, которым я решил это, в качестве ответа:

Я сделал минимум для автомасштабирования, вставив невидимый маркер в начало данных. Это заставляет сюжет всегда "показывать" это, хотя это не может быть видно.

Затем я реализовал максимум за пределами gnuplot (возможно, он мог бы быть и внутри, взгляните наmgilson's answer), в скрипте парсера, который я использовал для подготовки данных для gnuplot.

На самом деле в сценарии я взял все «обрезанные». значения, добавил их к y = 0 и сделал их красными. Таким образом, я получаю «предупреждение», значения которого слишком велики, чтобы их можно было воспринимать на графике. (Моя программа отслеживает пинг между двумя хостами, и нет смысла пытаться отобразить график 5s + latencies = & gt; я отмечаю его как разорванное соединение)

18

Начиная с версии 4.6, gnuplot предлагает новый синтаксис для указания верхнего и нижнего пределов для автоматического масштабирования. Для вашего случая вы можете использовать

set xrange [0:100 < * < 1000]

Цитирование из документации:

Диапазон, в котором выполняется автоматическое масштабирование, может быть ограничен нижней границей<lb> или верхняя граница<ub> или оба. Синтаксис

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

Например

0 < * < 200

наборы<lb> = 0 а также<ub> = 200.

Этот синтаксис может применяться как к минимальному, так и к максимальному значениюset *range.

Для автомасштабированияxmin но сохраняя его положительным, используйте

set xrange [0<*:]

Для автомасштабированияx но сохраняйте минимальный диапазон от 10 до 50:

set xrange [*<10:50<*]

Смотрите документацию оset xrange для дополнительной информации.

4

В этом случае вы можете отфильтровать данные и позволить gnuplot выполнить обычное автоматическое масштабирование:

set yrange [*:*]
plot 'mydatafile' u 1:(($2 >= YMIN && $2 <= YMAX) ? $2 : 1/0)
@varesa - если вы используете gnuplot 4.6, также естьstats команда, которую вы могли бы связать вышеупомянутый фильтр и переменные, определенные в gnuplot:GPVAL_YMIN а такжеGPVAL_XMIN, но теперь мы начинаем немного усложняться. «невидимый» Дело в том, что интересная идея - она мне нравится.
Это почти то, что я сделал (но за пределами gnuplot). Извините, если я неверно прочитал код, но это не учитывает каждое значение ниже YMIN? Возможно, вы немного неправильно истолковали то, что я хотел (например, Ymin = 0, Ymax = 100-1000). Я решил эту проблему, добавив одну точку данных с цветом фона (поэтому он невидим) в YMIN. Это дало мне эффект, который я хотел. varesa
@mgilson Gnuplot 4.6 даже добавил новый синтаксис для таких верхних и нижних пределов в автоматическом масштабировании, какset xrange [0:100 < * < 1000].
Какие?? Это серьезно круто ...

Похожие вопросы