Wie der Titel schon sagt: Wie kann ich eine Legende außerhalb des Plotbereichs zeichnen, wenn ich Basisgrafiken verwende?
Ich habe darüber nachgedacht, mit layout
einem leeren Plot herumzuspielen und ihn zu erstellen, um nur die Legende zu enthalten, aber ich wäre daran interessiert, nur die Basisgraph-Funktionen zu verwenden und z. B. par(mar = )
rechts neben dem Plot Platz für die Legende zu schaffen.
Hier ein Beispiel:
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
produziert:
Wie gesagt, ich möchte, dass sich die Legende außerhalb des Plotbereichs befindet (z. B. rechts neben dem Diagramm / Plot.
Antworten:
Möglicherweise müssen Sie
par(xpd=TRUE)
ermöglichen, dass Dinge außerhalb des Plotbereichs gezeichnet werden. Wenn Sie also die Haupthandlung mit machen, habenbty='L'
Sie rechts Platz für eine Legende. Normalerweise wird dies auf den Plotbereich beschränkt, aberpar(xpd=TRUE)
mit ein wenig Anpassung können Sie eine Legende so weit wie möglich nach rechts bringen:quelle
par(xpd=NA)
ist sie noch mächtiger (dh Handlungen in mehr Regionen).par
kurz vor der Legende einen separaten Anruf zu tätigen. In meiner Handlung habe ich beipar(new=T)
mehreren anderen Gelegenheiten verwendet und wollte einfach denxpd
Parameter im selben Aufruf hinzufügen , was zu Problemen führt.Niemand hat erwähnt, negative
inset
Werte für zu verwendenlegend
. Hier ist ein Beispiel, in dem sich die Legende rechts neben dem Plot befindet und oben ausgerichtet ist (mithilfe des Schlüsselworts"topright"
).Der erste Wert von muss
inset=c(-0.2,0)
möglicherweise basierend auf der Breite der Legende angepasst werden.quelle
xpd
muss eingestellt werden,TRUE
damit der negative Einschub funktioniert. Aber manchmal nicht. Mit dem Befehlargs.legend=list(x="bottom", horiz=TRUE, inset=-0.2)
innerhalb einesbarplot(...
scheint es nicht zu brauchen,xpd=TRUE
aber mit nurlegend(x="bottom", horiz=TRUE, inset=-0.2)
scheint es zu brauchenxpd=TRUE
. Irgendwelche Einsichten? Ich bin nur verwirrt, wenn ich meine Argumente weitergebe?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:Einstellung
oma
undmar
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:Und wir sind bereit, die Legende hinzuzufügen:
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;
Und ein Beispiel. Erstellen Sie zuerst das Diagramm und stellen Sie sicher, dass unten genügend Platz vorhanden ist, um die Legende hinzuzufügen:
Fügen Sie dann die Legende hinzu
Ergebend:
quelle
Es tut mir leid, dass ich einen alten Thread wiederbelebt habe, aber ich hatte heute das gleiche Problem. Der einfachste Weg, den ich gefunden habe, ist der folgende:
Hier zu finden: http://www.harding.edu/fmccown/R/
quelle
Ich mache es gerne so:
Die einzige erforderliche Optimierung besteht darin, den rechten Rand so einzustellen, dass er der Legende entspricht.
Dies kann jedoch auch automatisiert werden:
quelle
Kürzlich fand ich eine sehr einfache und interessante Funktion, um Legenden außerhalb des gewünschten Plotbereichs zu drucken.
Machen Sie den äußeren Rand auf der rechten Seite des Diagramms.
Erstellen Sie ein Diagramm
Fügen Sie eine Legende hinzu und verwenden Sie einfach die Locator (1) -Funktion wie unten. Dann müssen Sie nur noch auf die gewünschte Stelle klicken, nachdem Sie das folgende Skript geladen haben.
Versuch es
quelle
Ich kann nur ein Beispiel für die bereits erwähnte Layoutlösung anbieten.
quelle
Hinzufügen einer weiteren einfachen Alternative, die meiner Meinung nach recht elegant ist.
Ihr Grundstück:
Legende:
Ergebnis:
Hier wurde Ihrem Beispiel nur die zweite Zeile der Legende hinzugefügt. Im Gegenzug:
inset=c(0,1)
- Verschiebt die Legende um einen Bruchteil des Plotbereichs in (x, y) Richtungen. In diesem Fall ist die Legende bei"bottomright"
Position. Es wird um 0 Zeichenbereiche in x-Richtung (bleibt also "rechts") und um 1 Zeichenbereich in y-Richtung (von unten nach oben) verschoben. Und so kommt es, dass es direkt über der Handlung erscheint.xpd=TRUE
- Lassen Sie die Legende außerhalb des Plotbereichs erscheinen.horiz=TRUE
- weist an, eine horizontale Legende zu erstellen.bty="n"
- Ein Stildetail, um den Legendenbegrenzungsrahmen loszuwerden.Gleiches gilt beim Hinzufügen einer Legende zur Seite:
Hier haben wir einfach die Legendenpositionen angepasst und zusätzlichen Randbereich auf der rechten Seite des Diagramms hinzugefügt. Ergebnis:
quelle
Sie können dies mit der Plotly R-API entweder mit Code oder über die GUI tun , indem Sie die Legende an die gewünschte Stelle ziehen.
Hier ist ein Beispiel. Das Diagramm und der Code sind auch hier .
Sie können die Legende außerhalb des Diagramms positionieren, indem Sie 100 oder -100 einen der x- und y-Werte zuweisen.
Hier sind die anderen Optionen:
list("x" = 100, "y" = 0)
für außen rechts untenlist("x" = 100, "y"= 1)
Außerhalb rechts obenlist("x" = 100, "y" = .5)
Außerhalb rechts Mittelist("x" = 0, "y" = -100)
Unter linkslist("x" = 0.5, "y" = -100)
Unter Mittelist("x" = 1, "y" = -100)
Unter rechtsDann die Antwort.
response = p$plotly(x,y,x2,y2, kwargs=list(layout=layoutstyle));
Plotly gibt eine URL mit Ihrem Diagramm zurück, wenn Sie einen Anruf tätigen. Sie können schneller darauf zugreifen, indem Sie anrufen,
browseURL(response$url)
damit Ihr Diagramm in Ihrem Browser für Sie geöffnet wird.Das gibt uns diese Grafik. Sie können die Legende auch aus der GUI heraus verschieben, und das Diagramm wird entsprechend skaliert. Vollständige Offenlegung: Ich bin im Plotly-Team.
quelle
Versuchen Sie,
layout()
was ich in der Vergangenheit dafür verwendet habe, indem Sie einfach ein leeres Diagramm unten erstellen, das richtig auf ungefähr 1/4 skaliert ist, und die Legendenteile manuell darin platzieren.Hier gibt es einige ältere Fragen, mit
legend()
denen Sie beginnen sollten.quelle