Eine andere Lösung neben den bereits erwähnten Ondes (mit layout
oderpar(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 oma
und mar
ist erforderlich, da das Innere des Grundstücks das gesamte Gerät abdecken soll. new=TRUE
wird 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: