ggplot2 plot area margins?

145,383

You can adjust the plot margins with plot.margin in theme() and then move your axis labels and title with the vjust argument of element_text(). For example :

library(ggplot2)
library(grid)
qplot(rnorm(100)) +
    ggtitle("Title") +
    theme(axis.title.x=element_text(vjust=-2)) +
    theme(axis.title.y=element_text(angle=90, vjust=-0.5)) +
    theme(plot.title=element_text(size=15, vjust=3)) +
    theme(plot.margin = unit(c(1,1,1,1), "cm"))

will give you something like this :

enter image description here

If you want more informations about the different theme() parameters and their arguments, you can just enter ?theme at the R prompt.

Share:
145,383

Related videos on Youtube

KT.
Author by

KT.

http://fouryears.eu/

Updated on July 30, 2022

Comments

  • KT.
    KT. almost 2 years

    Is there an easy way to increase the space between the plot title and plot area below it (i.e., the box with the data). Similarly, I'd prefer to have some space between the axis title and axis labels.

    In other words, is there a way to "move the title a bit up, the y axis title a bit left, and the x axis title a bit down"?

    • joran
      joran almost 12 years
      You can always paste some "\n" characters to the titles to force new lines.
  • Paul 'Joey' McMurdie
    Paul 'Joey' McMurdie over 11 years
    Thanks! I wasn't sure what to provide to grid::units to make this work for the plot.margin argument. Turns out you have to provide a length-4 numeric to units. Too bad the x argument to units isn't recycled in some way. Also, you probably know this already, but worth noting/updating that opts is now deprecated in the latest version of ggplot2 (0.9.2+), replaced by theme, as is theme_text now replaced by element_text.
  • mightypile
    mightypile almost 7 years
    The order of edges for plot.margin is unit(c(top, right, bottom, left), units) if anyone else wants to save the time looking that up.
  • Tung
    Tung over 5 years
    @generic_user: maybe easier to remember as noted here: t, r, b, l (To remember order, think trouble).
  • Mehdi.K
    Mehdi.K over 5 years
    @PaulMcMurdie Could you please tell what exactly you entered for the units argument? I cannot make it work. Thanks!
  • spops
    spops almost 5 years
    Alternatively to remember... it's just clockwise from the top: top, right, bottom, left.
  • Brian D
    Brian D over 4 years
    also: margin(t, r, l, b)
  • Kodiakflds
    Kodiakflds almost 4 years
    @Mehdi.K I believe that the syntax used to be "plot.margin = grid::unit(t, r, b, l)) Best I can tell ggplot is not using 'units' anymore? I've been using plot.margin = margin(0,0,0,0, unit = 'cm') as suggested by BrianD
  • ESELIA
    ESELIA over 2 years
    And the default plot margins for the theme you are using can be found by extracting plot.margin from the theme you are using as in theme_grey()$plot.margin (copied from the answer in this question: stackoverflow.com/questions/32146846/…)