theme - Colocación de leyenda, ggplot, relativo a la región de trazado
ggtitle (4)
He estado buscando una respuesta similar. Pero descubrió que la función opts
ya no forma parte del paquete ggplot2. Después de buscar un poco más de tiempo, descubrí que uno puede usar el theme
para hacer cosas similares como opts. Por lo tanto, editar este hilo, para minimizar el tiempo de los demás.
A continuación se muestra el código similar escrito por nzcoops .
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
library(gridExtra)
a <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is top left") +
theme(legend.justification = c(0, 1), legend.position = c(0, 1))
b <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is bottom right") +
theme(legend.justification = c(1, 0), legend.position = c(1, 0))
c <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is bottom left") +
theme(legend.justification = c(0, 0), legend.position = c(0, 0))
d <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is top right") +
theme(legend.justification = c(1, 1), legend.position = c(1, 1))
grid.arrange(a,b,c,d)
Este código dará una trama exactamente similar.
El problema aquí es un poco obvio, creo. Me gustaría que la leyenda se coloque (bloqueada) en la esquina superior izquierda de la ''región de trazado''. Usar c (0.1.0.13) etc. no es una opción por varias razones.
¿Hay alguna forma de cambiar el punto de referencia de las coordenadas para que estén relacionadas con la región de trazado?
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1), title="Legend placement makes me sad")
Aclamaciones
Para ampliar las respuestas de excellend anteriores, si desea agregar relleno entre la leyenda y el exterior de la caja, use legend.box.margin
:
# Positions legend at the bottom right, with 50 padding
# between the legend and the outside of the graph.
theme(legend.justification = c(1, 0),
legend.position = c(1, 0),
legend.box.margin=margin(c(50,50,50,50)))
Esto funciona en la última versión de ggplot2
que es v2.2.1 en el momento de la escritura.
Actualización: opts
ha quedado obsoleto. Utilice el theme
lugar, como se describe en esta respuesta.
La colocación de la guía se basa en la región de la gráfica (es decir, el área llena de gris) de forma predeterminada, pero la justificación se centra. Entonces necesitas establecer la justificación izquierda-arriba:
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1),
legend.justification = c(0, 1),
legend.background = theme_rect(colour = NA, fill = "white"),
title="Legend placement makes me happy")
Si desea colocar la guía en la región del dispositivo completo, puede ajustar la salida de tablable:
p <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1),
legend.justification = c(0, 1),
legend.background = theme_rect(colour = "black"),
title="Legend placement makes me happy")
gt <- ggplot_gtable(ggplot_build(p))
nr <- max(gt$layout$b)
nc <- max(gt$layout$r)
gb <- which(gt$layout$name == "guide-box")
gt$layout[gb, 1:4] <- c(1, 1, nr, nc)
grid.newpage()
grid.draw(gt)
Actualización: opts
ha quedado obsoleto. Utilice el theme
lugar, como se describe en esta respuesta.
Solo para expandir la respuesta de Kohske, entonces es un poco más completa para que la siguiente persona se tropiece con ella.
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
library(gridExtra)
a <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(0, 1), legend.position = c(0, 1), title="Legend is top left")
b <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(1, 0), legend.position = c(1, 0), title="Legend is bottom right")
c <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(0, 0), legend.position = c(0, 0), title="Legend is bottom left")
d <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(1, 1), legend.position = c(1, 1), title="Legend is top right")
grid.arrange(a,b,c,d)