gnuplot - добавление медианы к графику с погрешностями И логарифмической осью x

Итак, у меня есть файлы данных в формате

x y ymin ymax

Это я рисую с помощью yerrorbars.

Теперь, как мне лучше всего добавить медиану значений y к графику, охватывающему весь диапазон x?

ОБНОВЛЕНИЕ

Я также рисую ось x в logscale, что, похоже, не позволяет использовать STATS.


person User1291    schedule 09.03.2016    source источник


Ответы (1)


Предположим, что ваши данные выглядят так:

1 8 6 9
2 6 5 7
3 5 4 8
4 6 5 8

Мы можем использовать команду stats, чтобы найти медиану. Использование аналогично команде plot. Здесь нам нужно выполнить анализ только второго столбца, поэтому мы укажем только второй столбец:

stats datafile u 2 nooutput

Опция nooutput указывает команде не печатать результаты. Если мы хотим увидеть полный анализ, мы просто опускаем эту спецификацию. По умолчанию команда stats сохраняет свои результаты в переменных вида STATS_*. При желании мы можем использовать другой префикс. Подробнее см. help stats.

На данный момент у нас есть переменная STATS_median, в которой хранится медиана значений y (которая равна 6 для выборочных данных). Теперь мы можем добавить медиану к графику одним из двух способов. Сначала мы можем просто добавить спецификацию графика в существующую команду plot:

plot datafile u 1:2:3:4 with yerrorbars, STATS_median

введите здесь описание изображения

или мы можем добавить строку с помощью команды set arrow, а затем построить только yerrorbars:

set arrow 1 from graph 0, first STATS_median to graph 1, first STATS_median nohead
plot datafile u 1:2:3:4 with yerrorbars

введите здесь описание изображения

Здесь мы задаем координату x в графических единицах в диапазоне от 0 (левая сторона) до 1 (правая сторона) и координату y в первой системе координат, которая соответствует оси y1. Указание nohead означает, что стрелку не рисовать. 1 сразу после set arrow помечает эту стрелку как стрелку 1, чтобы мы могли легко изменить или удалить ее позже.

Доступны другие варианты. Подробнее см. help arrow.

person Matthew    schedule 09.03.2016
comment
Большое спасибо. Однако есть небольшая проблема... Я рисую ось x в logscale, а gnuplot отказывается разрешить мне использовать STATS, когда я это делаю. Я не думаю, что у вас есть решение и для этого? - person User1291; 09.03.2016
comment
@ User1291 Кажется, что все работает нормально, если вы запустите команду статистики ДО того, как вы выдадите set logscale x. Все остальное работает при включенном логарифмическом масштабе. - person Matthew; 09.03.2016
comment
Нет, это не... постоянно говорит мне, что команда Stats недоступна при активной логарифмической шкале. - person User1291; 09.03.2016
comment
Поправочка, это действительно работает. Моя ошибка заключалась в том, что я запустил gnuplot, а затем загрузил скрипт, в результате чего логарифмическая шкала все еще была активной после предыдущих попыток. Повторное открытие gnuplot помогло. - person User1291; 10.03.2016
comment
есть команда вернуть x к линейному: unset logscale x (для каждого set есть unset). Еще одна хорошая вещь — поставить reset поверх вашего скрипта script.gp, чтобы при вызове load 'script.gp' у вас всегда был чистый gnuplot - person bibi; 10.03.2016