Гистограмма с накоплением столбцов Gnuplot и полосами ошибок

Предположим, у меня есть следующий файл данных so-qn.dat:

Type   on on-err off off-err
good   75 5      55  4
bad    15 2      30  3
#other 10 1      15  2

который содержит значения в столбцах 2 и 4 и соответствующие дельты ошибок в столбцах 3 и 5.

Я могу построить гистограмму с накоплением столбцов:

#!/usr/bin/gnuplot
set terminal png
set output 'so-qn.png'
set linetype 1 lc rgb "blue" lw 2 pt 0
set linetype 2 lc rgb "dark-red" lw 2 pt 0
set style data histograms
set style histogram columnstacked
set style fill solid
set ylabel "% of all items"
set yrange [0:100]
set boxwidth 0.75
set xtics scale 0
set xlabel "Option"
plot 'so-qn.dat' using 2 ti col, \
              '' using 4:key(1) ti col

Но я не могу понять, как добавить к этому панели ошибок. Самое близкое, что у меня получилось, это с

plot 'so-qn.dat' using 2 ti col, '' using 2:3 with yerrorbars lc rgb 'black' ti col, \
              '' using 4:key(1) ti col, '' using 4:5:key(1) with yerrorbars lc rgb 'black' ti col

который производит

но только одна из полосок ошибок находится в нужном месте (на самом деле я понятия не имею, откуда нижняя левая получает свое y), одна полностью невидима (спрятана за правым стеком?), и я бы хотел, чтобы полосы ошибок не показываться в ключе.

Можно ли комбинировать гистограммы с накоплением столбцов и планки погрешностей?


person Lucas Werkmeister    schedule 08.10.2015    source источник
comment
Собственно, посмотрев на ключ, я понимаю, откуда берется нижняя левая шкала ошибок - это первая для off-err (55 ± 4). Похоже, полосы ошибок перемещаются слева направо, каждый раз перезагружаясь с первого стека, вместо того, чтобы перемещаться по правому стеку.   -  person Lucas Werkmeister    schedule 09.10.2015


Ответы (1)


Вы можете добавлять полосы ошибок к гистограммам с накоплением столбцов, вручную добавляя команды построения графиков для полос ошибок. Однако для этого вам нужно отслеживать y-позиции.

Поэтому давайте введем две переменные, которые хранят y-позицию для каждой из полос ошибок двух столбцов.

y1 = -2
y2 = -4

Вам нужно инициализировать эти переменные с помощью -(number of column). Затем давайте определим две функции, которые обновляют переменные y1, y2.

f1(x) = (y1 = y1+x)
f2(x) = (y2 = y2+x)

Теперь сгенерируйте желаемый график с помощью

plot 'so-qn.dat' using 2 ti col, \
              '' using 4:key(1) ti col, \
              '' using (0):(f1($2)):3 w yerr t "", \
              '' using (1):(f2($4)):5 w yerr t ""

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

Как видите, вы можете подавить полосы ошибок в ключе, присвоив пустой заголовок (t ""). Такой подход даже дает вам больше гибкости в настройке внешнего вида полос ошибок (например, назначение разных стилей линий и т. Д.).

При этом я лично считаю, что эта визуализация довольно сбивает с толку. Возможно, вы захотите рассмотреть другую визуализацию:

set bars fullwidth 0
set style data histograms
set style fill solid 1 border lt -1
set style histogram errorbars gap 2 lw 2
plot 'so-qn.dat' using 2:3:xtic(1) ti columnhead(2), \
    '' using 4:5:xtic(1) ti columnhead(4)

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

person F. Knorr    schedule 16.10.2015
comment
Большое тебе спасибо! К сожалению, этот ответ приходит слишком поздно для меня лично, так как я уже сдал работу, где мне были нужны сюжеты, но, надеюсь, она будет полезна кому-то еще или мне в будущем. Относительно вашего комментария о том, что визуализация сбивает с толку: в моем наборе данных «хорошо», «плохо» и «другое» - это проценты. «Другое» закомментировано, потому что не добавляет информации - с «другим» весь стек будет ровно 100%. Я думаю, что, поскольку эти проценты принадлежат друг другу, имеет смысл представить каждую группу как единый стек. - person Lucas Werkmeister; 16.10.2015