Search code examples
gnuplot

Combining yerrorbars and variable point size


I'm trying to plot the following data file

#x  y   s   err
1   1   0.1 0.2
2   2   0.2 0.2
3   3   0.3 0.2
4   4   0.4 0.2
5   5   0.5 0.2
6   6   0.6 0.2
7   7   0.7 0.2
8   8   0.8 0.2
9   9   0.9 0.2
10  10  1.0 0.2

where the points have a variable size given by column 3 and the errors are given in column 4. I can get

plot "test" u 1:2:3 pt 7 ps variable
plot "test" u 1:2:4 w yerrorbars pt 7

to work independently, giving me this:

enter image description here

But when I try to combine them

plot "test" u 1:2:4:3 w yerrorbars pt 7 ps variable

I get something very strange:

enter image description here

yerrorbars seems to be using column 4 as the y column and column 3 as the yerror column. Even stranger, I get the same output if I try u 1:2:3:4. Is there something wrong with how I'm doing this? I can manually draw the errorbars as vectors, but I'd prefer to use the built-in errorbars style if possible.


Solution

  • gnuplot> help yerrorbars
    
     The `yerrorbars` (or `errorbars`) style is only relevant to 2D data plots.
     `yerrorbars` is like `points`, except that a vertical error bar is also drawn.
     At each point (x,y), a line is drawn from (x,y-ydelta) to (x,y+ydelta) or
     from (x,ylow) to (x,yhigh), depending on how many data columns are provided.
     The appearance of the tic mark at the ends of the bar is controlled by
     `set errorbars`.
    
          2 columns:  [implicit x] y ydelta
          3 columns:  x  y  ydelta
          4 columns:  x  y  ylow  yhigh
    
     An additional input column (4th or 5th) may be used to provide information
     such as variable point color.
    

    So in order to provide more than 3 columns and still use a single value for the ydelta, you should be able to do

    plot "test" u 1:2:($2-$4):($2+$4):3 w yerrorbars pt 7 ps variable 
    

    However, as you point out this doesn't actually work as documented.

    Work-around

    An alternative is to make two passes; first plot the errorbar lines and suppress the points, second plot the point with the desired properties :

    unset key
    plot "test" u 1:2:3 with yerrorbars pt 0, \
             "" u 1:2:4 with points pt 7 ps variable
    

    enter image description here