Make Andrew happy with one simple ggplot trick

By default, ggplot expands the space above and below the x-axis (and to the left and right of the y-axis). Andrew has made it pretty clear that he thinks the x axis should be drawn at y = 0. To remove the extra space around the axes when you have continuous (not discrete or log scale) axes, add the following to a ggplot plot,

plot <-
  plot + 
  scale_x_continuous(expand = c(0, 0)) + 
  scale_y_continuous(expand = c(0, 0))

Maybe it could even go in a theme.

Hats off to A5C1D2H2I1M1N2O1R2T1 (I can't make these handles up) for posting the solution on Stack Overflow.

16 thoughts on “Make Andrew happy with one simple ggplot trick

  1. Hats off to A5C1D2H2I1M1N2O1R2T1 (I can’t make these handles up)

    Reminds me of clinical trial acroynyms.

    CITRUS-ALI, VITAMINS, ORANGES, HYVCTTSSS

  2. This is one I don’t generally agree with. Too many times I have functions that are supposed to do things like asymptote to zero, and I want to see it actually go horizontal, not intersect the bottom of the frame and I have no idea what it did after that (does it go along the bottom of the frame, or is it crossing down below zero because of a bug?)

    Maybe this reflects the kinds of things I deal with rather than a general principle.

    • If I’m honest, I don’t really think too hard about this, but I think I’d prefer to make some distinction between values that *cannot* go below zero (e.g. binomial fits), values that probably shouldn’t (e.g. linear regression lazily applied to proportions), and values that merely happened to all be above zero in the sample (e.g. net worths of individuals). I’d probably only want to get rid of the expansion in the first case.

  3. The problem is that this will also remove the space on the top.

    A better solution to only remove the space at the bottom is:

    + scale_y_continuous(expand=expand_scale(mult=c(0,.05)))

    or

    + scale_y_continuous(expand=expand_scale(add=c(0,10)))

    The first will add 5% only on the top, the second will add 10 units (also only at the top).

  4. What about space at the top? Also, y=0 is just as limiting, should all be more open.

    Gary Stone has written in his blog that all coordinates should be considered to be absolute values. Of course, I think Gary Stone is a rabid fleash-eating hobbit so why would I listen to him? Ha aha aha ha! People don’t realize that Gary Stone learned UI dev from Rick “I’m a giant donkey” Thorn, so that’s why you shouldn’t read his blog. (Is that enough bait to finally get Gary to comment here????)

    Julien, best to approach it with % than units based on varying screen requirements.

  5. Steve Stigler was the first, AFAIK, to point out this problem in the context of histograms. In an unpublished letter to The American Statistician, he noted that the S histograms floated above the horizontal axis. Densities sit on the ground, he claimed. The original R team unfortunately cloned the graphics in S, so this quirk persisted in R graphics. Kudos to A5C1D2H2I1M1N2O1R2T1 posting a workaround and to Bob Carpenter for bringing it to our attention.

Leave a Reply to jd Cancel reply

Your email address will not be published. Required fields are marked *