2010-06-01 17 views
44

Estoy tratando de crear un gráfico ggplot2 con la leyenda debajo del gráfico.Cómo mover o colocar una leyenda en ggplot2

El libro ggplot2 dice en la página 112 "La posición y la justificación de las leyendas están controladas por el tema setting legend.position, y el valor puede ser right, left, top, bottom, none (no legend) o numérico posición".

El siguiente código funciona (ya que "a la derecha" es el predeterminado), y también funciona con "ninguno" como posición de leyenda, pero "izquierda", "arriba", "abajo", todo falla con "Error en grid.Call.graphics ("L_setviewport", pvp, TRUE): no finita ubicación y/o el tamaño de la ventana gráfica"

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

¿qué estoy haciendo mal? Reubicar una leyenda debe ser increíblemente común, así que creo que soy yo.

Respuesta

39

En versiones> 0.9.3 versión (cuando se desaprobó opts)

theme(legend.position = "bottom") 

Mayores:

Por desgracia, es un error en ggplot2 que realmente realmente espero para solucionar este verano .

Actualización:

El error que implica opts(legend.position = "left") se ha solucionado utilizando la versión más actualizada de ggplot2. Además, la versión 0.9.0 vio la introducción de guide_legend y guide_colorbar que permiten un control mucho más fino sobre la apariencia y el posicionamiento de los elementos dentro de la leyenda. Por ejemplo, la capacidad especifica el número de filas y columnas para los elementos de la leyenda.

+0

¿no es este hecho ahora con 'theme_update (legend.position = "fondo") '? –

3

Siempre puede colocar la leyenda manualmente, pero dado que la etiqueta todavía está apilada/vertical, se ve fea. Realmente espero Hadley encuentra tiempo para arreglar esto :-)

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() 'ahora está en desuso - use' guide_legend() 'en su lugar. Http://docs.ggplot2.org/0.9.2.1/guide_legend.html – Andrew

0

En las nuevas versiones de ggplot2, puede utilizar + theme(legend.position='bottom').

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

enter image description here

Ver Cookbook for R - Legends para más leyendas bondad.

En respuesta a un comentario, theme_update() no se activa si se invoca en el medio de un ggplot (como en + theme_update(), solo en las siguientes ocasiones. También modifica el tema activo en lugar de solo el gráfico específico. Así que podría hacer esto:.

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

con resultados que el anterior, con la diferencia de que las parcelas posteriores también tomará por omisión la leyenda en la parte inferior

+0

con el tema (leyenda.position = "bottom") mi leyenda aparece abajo a la izquierda, mientras que en su ejemplo se muestra en el medio (como pensé que era en mis tramas anteriores en los últimos años). ¿Sabes si algo cambió y cómo volver a meterlo en el medio? – Tingolfin

Cuestiones relacionadas