ggplot2 Plotflächenränder?

86

Gibt es eine einfache Möglichkeit, den Abstand zwischen dem Plottitel und dem darunter liegenden Plotbereich (dem Feld mit den Daten) zu vergrößern? Ebenso würde ich es vorziehen, zwischen dem Achsentitel und den Achsenbeschriftungen etwas Platz zu haben.

Mit anderen Worten, gibt es eine Möglichkeit, "den Titel etwas nach oben, den Titel der y-Achse etwas nach links und den Titel der x-Achse etwas nach unten zu verschieben"?

KT.
quelle
1
Sie können jederzeit einige "\n"Zeichen in die Titel einfügen , um neue Zeilen zu erzwingen.
Joran

Antworten:

113

Sie können die Plotränder mit plot.marginin anpassen theme()und dann Ihre Achsenbeschriftungen und Titel mit dem vjustArgument von verschieben element_text(). Zum Beispiel :

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

wird Ihnen so etwas geben:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie weitere Informationen zu den verschiedenen theme()Parametern und ihren Argumenten wünschen , können Sie diese einfach ?themean der Eingabeaufforderung R eingeben .

Juba
quelle
4
Vielen Dank! Ich war mir nicht sicher, was ich bereitstellen sollte grid::units, damit dies für das plot.marginArgument funktioniert . Es stellt sich heraus, dass Sie eine numerische Länge von 4 angeben müssen units. Schade, dass das xArgument unitsnicht in irgendeiner Weise recycelt wird. Sie wissen das wahrscheinlich auch schon, aber es lohnt sich, darauf optshinzuweisen / zu aktualisieren, dass es in der neuesten Version von ggplot2 (0.9.2+) veraltet themeist theme_textund durch ersetzt wird , wie es jetzt durch ersetzt wird element_text.
Paul McMurdie
42
Die Reihenfolge der Kanten für plot.margin ist Einheit (c (oben, rechts, unten, links), Einheiten), wenn jemand anderes die Zeit sparen möchte, die nachgeschlagen wird.
mächtiger
16
@generic_user: vielleicht leichter zu merken, wie hier angegeben :t, r, b, l (To remember order, think trouble).
Tung
3
Alternativ zu erinnern ... es von oben nur im Uhrzeigersinn ist: top, right, bottom, left.
Spops
1
auch:margin(t, r, l, b)
Brian D