studio - R-combinado geom_vline y geom_smooth en la leyenda
ggplot2 pdf (1)
Me encuentro con un comportamiento extraño en mi leyenda cuando agrego un geom_smooth()
y un geom_vline()
en mi tabla ggplot2. Aquí hay un ejemplo reproducible:
library(ggplot2)
n <- 60
set.seed(123)
df <- data.frame(Area = sample(c("A", "B", "C", "D"), size = n, replace = TRUE),
x = runif(n),
y = runif(n),
Type = sample(c("I", "II"), size = n, replace = TRUE),
Result = sample(c("K", "L", "M"), size = n, replace = TRUE))
df.breaks <- data.frame(Area = c("B", "C"), x = c(0.8, 0.3))
ggplot(df, aes(x = x, y = y)) +
geom_point(aes(colour = Result, shape = Type), size = 3) +
geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +
geom_hline(yintercept = 0.3) +
facet_wrap(~Area) +
geom_vline(data = df.breaks, aes(xintercept = x, linetype = "Break"), colour = "purple") +
scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) +
scale_linetype_manual(name = "Lines", values = c("Break" = "dashed", "Smooth" = "solid"))
Como notará, la leyenda "Líneas" tiene líneas verticales y horizontales en cada elemento, y en el primer caso hay un par de líneas discontinuas, mientras que en el segundo caso, un par de líneas continuas. Estoy tratando de ajustar mi código para producir una leyenda con (1) una línea verde horizontal y una tecla al lado llamada "Suave" y (2) una línea vertical dahsed púrpura con una tecla al lado llamada "Rotura". Agradecería algo de ayuda ya que, sin importar lo que intenté (incluido el linetype
dentro / fuera de aes()
, etc., o el uso de scale_linetype_identity()
, o incluso la opción override.aes
en las guides
) ¡No pude encontrar la combinación correcta!
Busqué ejemplos similares y aunque encontré otras publicaciones con una línea vertical superpuesta sobre el colour
, el fill
o la shape
, etc., no pude encontrar una con una línea vertical en una leyenda linetype
como la mía. ¡Cualquier ayuda será muy apreciada! ¡Gracias!
Una respuesta tardía a esta pregunta, pero pensé que sería mejor tener una respuesta disponible en caso de que alguien (¡o mi yo futuro!) Esté interesado en esto.
Siguiendo la sugerencia de @aosmith en la sección de comentarios y su aliento para proporcionar la respuesta, finalmente reemplacé el código de la trama con:
ggplot(df, aes(x = x, y = y)) +
geom_point(aes(colour = Result, shape = Type), size = 3) +
geom_hline(yintercept = 0.3) +
facet_wrap(~Area) +
geom_vline(data = df.breaks,
aes(xintercept = x, linetype = "Break"), colour = "purple") +
scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) +
scale_linetype_manual(name = "Lines",
values = c("Break" = "dashed", "Smooth" = "solid")) +
geom_smooth(aes(fill = "Smooth"), method = "loess", colour = "green", se = FALSE) +
scale_fill_discrete(name = "")
Las dos últimas líneas anteriores reemplazan la siguiente línea del código original:
geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +
.
La tabla resultante todavía necesita algo de trabajo, especialmente con el espaciado entre leyendas, pero resuelve el problema original.