leyenda ggplot2 hacia abajo y horizontal


109

¿Cómo puedo mover una leyenda de ggplot2 a la parte inferior del gráfico y girarla horizontalmente?

Código de muestra:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend())

Resultado deseado (aproximado): ingrese la descripción de la imagen aquí


2
Después de 7 años y 8 meses, finalmente descubrí cómo obtener el resultado deseado para esta pregunta :) Desplácese hacia abajo hasta la segunda respuesta.
Arthur Yip

Respuestas:


146

Si desea mover la posición de la leyenda, utilice el siguiente código:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
    theme(legend.position="bottom")

Esto debería darle el resultado deseado. Leyenda en la parte inferior


2
¿Sabes si es posible dibujar una barra de leyenda continua en la parte inferior? (así que no con el número en el medio, sino en la parte superior). Gracias.
Janvb

3
Con corriente ggplot, esto me da la advertencia 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). Sustitución optspor themeobras.
krlmlr

Sí, anticipo que habrá un cambio en el funcionamiento interno deggplot
Shreyas Karnik

10
Es una mala práctica utilizar elementos depreciados. Puede hacerlo usando el tema exactamente de la misma manera:+ theme(legend.position='bottom')
antes del

desafortunadamente, existe cierta ambigüedad cuando los números y los colores están uno al lado del otro; vea mi respuesta a continuación en varios intentos de mejorar esto.
Arthur Yip

37

A continuación, se explica cómo crear el resultado deseado:

library(reshape2); library(tidyverse)
melt(outer(1:4, 1:4), varnames = c("X1", "X2")) %>%
ggplot() + 
  geom_tile(aes(X1, X2, fill = value)) + 
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom",
        legend.spacing.x = unit(0, 'cm'))+
  guides(fill = guide_legend(label.position = "bottom"))

Creado el 2019-12-07 por el paquete reprex (v0.3.0)


Editar: ya no hay necesidad de estas opciones imperfectas, pero las dejo aquí como referencia.

Dos opciones imperfectas que no te dan exactamente lo que estabas pidiendo, pero bastante cercanas (al menos unirán los colores).

library(reshape2); library(tidyverse)
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
 theme(legend.position="bottom", legend.direction="vertical")

p1 + scale_fill_continuous(guide = "colorbar") + theme(legend.position="bottom")

Creado el 28/02/2019 por el paquete reprex (v0.2.1)


Si bien esto teóricamente puede responder a la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia.
Rohit Gupta

Ahora he mejorado mi respuesta para proporcionar dos soluciones imperfectas
Arthur Yip
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.