When plotting in R, I often use the
segments function to add lines representing confidence intervals. This is a very simple way to plot lines connecting pairs of x,y coordinates.
Recently I discovered that by default, segments are styled with rounded line caps, which add to their length. This means, of course, that confidence intervals are slightly wider than intended.
R provides three styles of line ending – round, butt and square – which can be specified by the
lend argument. The figure here shows the outcome of using each line ending, with vertical lines indicating actual end-points of segments. Both round and square line ends overshoot these points, while butt ends represent them correctly.
plot.new() par(mar=c(1, 4, 1, 1)) plot.window(xlim=c(0, 1), ylim=c(0.5, 3.5)) axis(2, 1:3, c('round', 'butt', 'square'), las=1) box(lwd=2) segments(0.1, 1, 0.9, 1, lwd=20, lend='round') segments(0.1, 2, 0.9, 2, lwd=20, lend='butt') segments(0.1, 3, 0.9, 3, lwd=20, lend='square') abline(v=c(0.1, 0.9))
The effect is slight, and is emphasized when line width is large. Regardless, it’s a good idea to routinely add
lend=2) to your
segments function calls.
A secondary benefit is that lines will appear crisper than when plotted with the default round caps.
Filed under: R Tagged: error bars, plotting, R, rstats, segments, tips&tricks