ggplot2 marginesy obszaru kreślenia?

86

Czy istnieje łatwy sposób na zwiększenie odstępu między tytułem wykresu a obszarem wykresu pod nim (ramką z danymi)? Podobnie wolałbym mieć trochę odstępu między tytułem osi a etykietami osi.

Innymi słowy, czy istnieje sposób na „przesunięcie tytułu nieco w górę, tytuł osi y nieco w lewo, a tytuł osi x nieco w dół”?

KT.
źródło
1
Zawsze możesz wkleić kilka "\n"znaków do tytułów, aby wymusić nowe wiersze.
joran

Odpowiedzi:

113

Możesz dostosować marginesy wydruku za pomocą plot.marginin, theme()a następnie przenieść etykiety osi i tytuł za pomocą vjustargumentu element_text(). Na przykład :

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"))

da ci coś takiego:

wprowadź opis obrazu tutaj

Jeśli chcesz uzyskać więcej informacji o różnych theme()parametrach i ich argumentach, możesz po prostu wpisać ?themew wierszu polecenia R.

juba
źródło
4
Dzięki! Nie byłem pewien, co mam podać, żeby grid::unitsta plot.marginargumentacja zadziałała . Okazuje się, że musisz podać długość od-4 do units. Szkoda, że xargument unitsnie został w żaden sposób przetworzony. Prawdopodobnie już to wiesz, ale warto zauważyć / zaktualizować, które optsjest obecnie przestarzałe w najnowszej wersji ggplot2 (0.9.2+), zastąpione przez theme, które jest theme_textteraz zastępowane przez element_text.
Paul McMurdie,
44
Kolejność krawędzi dla plot.margin to jednostka (c (góra, prawa, dół, lewa), jednostki), jeśli ktoś inny chce zaoszczędzić czas na szukaniu tego.
mightypile
16
@generic_user: być może łatwiejsze do zapamiętania, jak wspomniano tutaj :t, r, b, l (To remember order, think trouble).
Tung
3
Alternatywnie, aby pamiętać ... to tylko do ruchu wskazówek zegara od góry: top, right, bottom, left.
spops
1
także:margin(t, r, l, b)
Brian D