2011-06-29 15 views
5

Digamos que tengo un conjunto de datos sobre el rendimiento de zanahoria de diferentes campos y diferentes razas:ggplot2: Leyenda que se superpone al área de trazado: ¿es posible ajustar manualmente la posición de leyenda?

carrots<-list(Yield=c(345,226,74,559,288,194), 
      Field=c("A","B","C","D","E","F"), 
      Breed=rep(c("Long","Short"),each=3)) 
carrots<-data.frame(carrots) 

Quiero trazar un gráfico de barras que muestra el rendimiento de cada campo, coloreado por raza:

ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) + 
    geom_bar() + 
    opts(legend.direction = "horizontal", 
     legend.position = "top") + 
    labs(fill="") 

pero la leyenda es siempre un poco por encima del área de trazado:

plot with slight legend overlap http://users.utu.fi/susjoh/Rplot.png

he trie d ajustar manualmente la posición de la leyenda a estar fuera del área de trazado, como con

opts(legend.position=c(0.5,1.1) 

pero luego los márgenes de la trama cortaron la leyenda y no estoy seguro de cómo me puedo ajustarlos. ¿Hay una solución más sutil a este problema?

+2

+1 para un ejemplo reproducible , aunque podría eliminar el segundo paso en la preparación de sus datos al llamar 'data.frame' en lugar de' list'. –

+0

Gracias Roman, cualquier consejo de R siempre es apreciado :) – susjoh

Respuesta

8

En mi entorno, la leyenda no se solapa con el área de trazado en absoluto, pero de todos modos lo que se solapan es el fondo de la leyenda, por lo que se puede quitar por:

ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) + 
geom_bar() + 
opts(legend.direction = "horizontal", 
    legend.position = "top", 
     legend.background = theme_blank()) + # this does hack 
labs(fill="") 
+0

Gracias kohske, esta es la solución simple que necesitaba. Es extraño que esto no sea universal. Para información, estoy usando R 2.13.0 en Windows. – susjoh

Cuestiones relacionadas