Lucas Werkmeister
Lucas Werkmeister

Reputation: 2742

Gnuplot columnstacked histogram with errorbars

Suppose I have the following data file, 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

which contains values on columns 2 and 4 and corresponding error deltas on columns 3 and 5.

I can produce a columnstacked histogram:

#!/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

But I can’t figure out how to add errorbars to this. The closest I got so far is with

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

which produces

but only one of the error bars is in the right spot (I actually have no idea where the bottom left one gets its y from), one is completely invisible (hidden behind the right stack?), and I’d like the error bars to not show up in the key.

Is it possible to combine column-stacked histograms and error bars?

Upvotes: 1

Views: 1471

Answers (1)

F. Knorr
F. Knorr

Reputation: 3055

You can add errorbars to column-stacked histograms by manually adding plot-commands for the errorbars. To do so, you need, however, to keep track of the y-positions.

Therefore, let's introduce two variables which store the y-position for each of the two columns' errorbars.

y1 = -2
y2 = -4

You need to initialize these variables with -(number of column) Next, let us define two functions that update the variables y1, y2.

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

Now, generate the desired plot via

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 ""

enter image description here

As you can see, you can supress the errorbars in the key by assigning an empty title (t ""). This approach even gives you more flexibility in customizing the appearance of the errorbars (e.g., assign different linestyles etc.).

This being said, I personally think this visualization is rather confusing. You might want to consider another visualization:

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)

enter image description here

Upvotes: 2

Related Questions