Eine andere Lösung neben den bereits erwähnten Ondes (mit layoutoderpar(xpd=TRUE) ) besteht darin, Ihr Diagramm mit einem transparenten Diagramm über das gesamte Gerät zu legen und dann die Legende hinzuzufügen.
Der Trick besteht darin, ein (leeres) Diagramm über den gesamten Plotbereich zu legen und die Legende hinzuzufügen. Wir können die par(fig=...)Option nutzen. Zuerst weisen wir R an, ein neues Diagramm über das gesamte Zeichengerät zu erstellen:
par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)
Einstellung omaund marist erforderlich, da das Innere des Grundstücks das gesamte Gerät abdecken soll. new=TRUEwird benötigt, um zu verhindern, dass R ein neues Gerät startet. Wir können dann das leere Diagramm hinzufügen:
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
Und wir sind bereit, die Legende hinzuzufügen:
legend("bottomright", ...)
fügt unten rechts auf dem Gerät eine Legende hinzu. Ebenso können wir die Legende am oberen oder rechten Rand hinzufügen. Das einzige, was wir sicherstellen müssen, ist, dass der Rand des ursprünglichen Grundstücks groß genug ist, um die Legende aufzunehmen.
All dies in eine Funktion umsetzen;
add_legend <- function(...) {
opar <- par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0),
mar=c(0, 0, 0, 0), new=TRUE)
on.exit(par(opar))
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
legend(...)
}
Und ein Beispiel. Erstellen Sie zuerst das Diagramm und stellen Sie sicher, dass unten genügend Platz vorhanden ist, um die Legende hinzuzufügen:
par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)
Fügen Sie dann die Legende hinzu
add_legend("topright", legend=c("Foo", "Bar"), pch=20,
col=c("steelblue", "indianred"),
horiz=TRUE, bty='n', cex=0.8)
Ergebend:
