2010-06-01 6 views
44

Ich versuche ein ggplot2-Diagramm mit der Legende unter dem Diagramm zu erstellen.So verschieben oder positionieren Sie eine Legende in ggplot2

Das Buch ggplot2 sagt auf Seite 112 "Die Position und Ausrichtung von Legenden werden durch das Thema legende.position gesteuert, und der Wert kann rechts, links, oben, unten, keine (keine Legende) oder eine Zahl sein Position".

Der folgende Code funktioniert (seit "rechts" ist die Standardeinstellung), und es funktioniert auch mit "keine" als Legendenposition, aber "links", "oben", "unten", alle Fehler mit "Fehler in grid.Call.graphics ("L_setviewport", pvp, TRUE): Non-finite Lage und/oder Größe für Ansichtsfenster“

library(ggplot2) 
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE))) 
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right") 

Was mache ich falsch? Die Neupositionierung einer Legende muss unglaublich häufig sein, also stelle ich fest, dass ich es bin.

Antwort

39

In Versionen> 0.9.3 (wenn opts veraltet wurde)

theme(legend.position = "bottom") 

ältere Version:

Leider ist es ein Bug in ggplot2, die ich hoffe wirklich, wirklich in diesem Sommer zu beheben .

Update:

Der Fehler opts(legend.position = "left") Beteiligung behoben wurde die aktuellste Version von ggplot2 verwenden. Darüber hinaus wurden in Version 0.9.0 guide_legend und guide_colorbar eingeführt, die eine bessere Kontrolle über das Aussehen und die Positionierung von Elementen in der Legende selbst ermöglichen. Zum Beispiel kann die Anzahl der Zeilen und Spalten für die Legendenelemente angegeben werden.

+0

ist das nicht getan jetzt mit 'theme_update (legend.position =„bottom“) '? –

3

Sie können die Legende immer manuell platzieren - aber da das Etikett immer noch gestapelt/vertikal ist, sieht es irgendwie hässlich aus. Ich hoffe wirklich, hadley Zeit findet diese :-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines")) 
+9

' opts() 'ist jetzt veraltet - verwenden Sie stattdessen' guide_legend() '. Http://docs.ggplot2.org/0.9.2.1/guide_legend.html – Andrew

0

In neueren Versionen von ggplot2 zu beheben, können Sie + theme(legend.position='bottom') verwenden.

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    theme(legend.position='bottom') 

enter image description here

Siehe Cookbook for R - Legends für mehr Güte Legenden.

Als Reaktion auf einen Kommentar tritt theme_update() nicht ein, wenn es in der Mitte eines ggplot aufgerufen wird (wie in + theme_update(), nur nachfolgende Male. Es ändert auch das aktive Thema und nicht nur den spezifischen Plot. So könnten Sie tun dies:.

theme_update(legend.position='bottom') 
qplot(VarX,VarY, data=myDat, shape=Descrip) 

mit Ergebnissen, wie oben, mit dem Unterschied, dass nachfolgende Plots auch der Legende auf der Unterseite werden standardmäßig

+0

mit Thema (Legende.position = "bottom") meine Legende erscheint unten links, während sie in deinem Beispiel in der Mitte angezeigt wird (wie ich es in meinen früheren Plots über die Jahre gesehen habe). Weißt du, ob sich daran etwas geändert hat und wie man es wieder in die Mitte bekommt? – Tingolfin

Verwandte Themen