So I was plotting something with beautiful ggplot2 and added error bars with geom_pointrange (yes, it doesn’t make sense to calculate SD on a % scale, but that’s for another day), result in A (left). So far so good. Since it was a % scale on the ordinate, I amended scale_y_continuous like so:

scale_y_continuous(name=”Testability, mean ± SD [%]”, limits = c(0, 100), expand = c(0, 0))

resulting in (B). Great, the ordinate now nicely runs from 0 to 100%, but why are the error bars gone? That stumped me for hours; I even came close to suspecting a bug in ggplot, unlikely as it is. Then I talked to my colleague Daniel, who found the solution: If you limit the scale like that, you remove all data points outside the given range, so the error bars are not clipped but considered off-scale and dropped completely! The solution is to not use “limits” in scale_xx_continuous but add this:

coord_cartesian(ylim = c(0, 100))

That only affects the appearance of the axis, like I want it, as seen in C.

Now, after the fact, I know: Yes, it’s in the book, but still for those like me while having read it, several times, but still haven’t digested every thing, this might save you some of your time.