2012-07-06 19 views
64

¿Hay alguna forma de cambiar el espacio entre los elementos de la leyenda en ggplot2? Actualmente tengo¿Hay alguna forma de cambiar el espacio entre los elementos de la leyenda en ggplot2?

legend.position ="top" 

que produce automáticamente una leyenda horizontal. Sin embargo, el espacio de los elementos está muy cerca y me pregunto cómo separarlos más.

+0

Sería útil tener una solución actual a este ahora que 'opts' se deprecia. – geotheory

+0

Aquí: https://pastebin.com/NnxMiTeH – PatrickT

Respuesta

7

De la obra de Koshke en ggplot2 y su blog (Koshke's blog)

... + theme(legend.key.height=unit(3,"line")) # Change 3 to X 
... + theme(legend.key.width=unit(3,"line")) # Change 3 to X 

Tipo theme_get() en la consola para ver los atributos de otra leyenda editable.

+9

¡Gracias por la sugerencia y el enlace al blog de Koshke! Lamentablemente, sin embargo, esto parece cambiar el tamaño de las cajas, pero no el espacio entre los elementos. – overflowname

+0

Es posible que pueda "simularlo" con algún tipo de grob superpuesto. Pero no creo que haya una manera de obtener espacio adicional dentro de la leyenda. Esta es la única mención que pude encontrar en la lista de correo de ggplot2: https://groups.google.com/forum/?fromgroups#!topic/ggplot2/PhkJpP8zJuM –

+1

Puedo usar esto para aumentar el espacio entre leyendas exitosamente. El uso de números negativos ayudó a disminuir el espacio entre leyendas. – Nova

28

Ahora que opts está en desuso en ggplot2 paquete, la función theme se debe utilizar en su lugar:

library(grid) # for unit() 
... + theme(legend.key.height=unit(3,"line")) 
... + theme(legend.key.width=unit(3,"line")) 
+9

Esta solución cambia la altura/ancho de los cuadros en lugar del espacio entre ellos. –

30

Una solución simple que utilizo para agregar espacio en las leyendas horizontales, sólo tiene que añadir espacios en las etiquetas (ver extraer a continuación):

scale_fill_manual(values=c("red","blue","white"), 
        labels=c("Label of category 1   ", 
          "Label of category 2   ", 
          "Label of category 3")) 
+8

¡Esta es la única respuesta que se refiere a la pregunta!Esto podría ser útil en el caso de muchas entradas: 'scale_fill_manual (values ​​= values, labels = setNames (paste (labels," "), entries))'. – SaschaH

+0

Técnicamente no muy agradable, especialmente cuando tienes que introducir esos espacios en niveles de factor, pero es la única solución de trabajo para eso. –

37

creo que la mejor opción es utilizar guide_legend dentro guides:

p + guides(fill=guide_legend(
       keywidth=0.1, 
       keyheight=0.1, 
       default.unit="inch") 
    ) 

Nota el uso de default.unit, no hay necesidad de cargar grid paquete.

+1

Esto necesita más votos positivos, las otras respuestas están desactualizadas. –

+2

esto no funciona para el gráfico geom_bar – timat

+1

Esto puede funcionar para leyendas horizontales. Sin embargo, para mi leyenda vertical a la derecha de la trama, esto solo aumenta la altura de la clave, no el espaciado entre las teclas. Mis claves de leyenda todavía están muy cerca la una de la otra. –

6

La forma de agregar espacio entre entradas en una leyenda horizontal debe ser para ajustar los márgenes del elemento de elemento legend.text. Por ejemplo, para agregar 24 puntos de espacio a la derecha de cada etiqueta de leyenda, para un objeto ggplot p:

p + theme(legend.text = element_text(margin = margin(r = 24, unit = "pt"))) 

Por desgracia, lo anterior no funciona, ya legend.text no responde a margin valores pasados ​​a element_text (tampoco lo hace legend.title). Este es un error conocido: https://github.com/tidyverse/ggplot2/issues/1502

Hasta que se solucione el error, la opción más simple para agregar espacio entre los elementos de la leyenda parece ser rellenar las etiquetas con espacios, como sugiere user2568648 and SaschaH.

0

utilizar cualquiera de estos

legend.spacing = unit(1,"cm") 
legend.spacing.x = unit(1,"cm") 
legend.spacing.y = unit(1,"cm") 
Cuestiones relacionadas