Raúl Vaquerizo
2020-Feb-12 13:55 UTC
[R-es] Añadir leyenda a un gráfico con eje secundario en ggplot
Hola, Me he dado cuenta que no soy capaz de añadir la leyenda a un gráfico con eje secundario en ggplot2. Os paso un ejemplo reproducible para ver si alguno puede ayudarme: ejex <- seq(1:20) peso <- rnorm(20,mean=1000,sd=300) actual <- rgamma(20,shape=seq(200,20, length.out = 20)) propuesta <- actual + rnorm(20,3,3) resumen <- cbind.data.frame(ejex, peso, actual, propuesta) g2 <- ggplot(resumen, aes(x=factor(ejex))) + geom_col(aes(y=peso),fill="yellow",alpha=0.5) + geom_line(aes(y=actual*10), group=1, color="red") + geom_line(aes(y=nueva*10), group=1, color="blue") + scale_y_continuous(sec.axis = sec_axis(~./10), name="") g2 Necesito poner las líneas correspondientes a las variables actual y propuesta. Nada más, pero tras varios intentos, exabruptos, scales y demás ggplot me está derrotando. Gracias.
Álvaro Hernández Vicente
2020-Feb-12 14:40 UTC
[R-es] Añadir leyenda a un gráfico con eje secundario en ggplot
Hola, Raúl: Lo de poner las líneas correspondientes lo tienes ya, solo que has escrito "nueva" en lugar de "actual" que es como has llamado a esa variable. Y si quieres poner una leyenda para el color de la línea lo puedes hacer de dos formas: pasando el data.frame a formato largo ("actual" y "propuesta" en una misma variable) o bien añadiéndola tú manualmente. No está relacionada con tener un eje secundario. En el primer caso puedes hacer: resumen %>% pivot_longer(cols = actual:propuesta, names_to = "Variable", values_to = "Valor") %>% ggplot(aes(x = factor(ejex))) + geom_col(data = resumen, aes(y = peso), fill = "yellow", alpha = 0.5) + geom_line(aes(y = (Valor*10), color = Variable, group = Variable)) + scale_y_continuous(sec.axis = sec_axis(~./10), name = "") + labs(y = "") Y para añadirla manualmente puedes hacer: ggplot(resumen, aes(x = factor(ejex), group = 1)) + geom_col(aes(y = peso), fill = "yellow", alpha = 0.5) + geom_line(aes(y = actual*10, color = "Actual")) + geom_line(aes(y = propuesta*10, color = "Propuesta")) + scale_y_continuous(sec.axis = sec_axis(~./10), name = "") + scale_color_manual(values = c("Actual" = "red", "Propuesta" = "blue")) Un saludo Álvaro El 12/2/20 a las 14:55, Raúl Vaquerizo escribió:> Hola, > > Me he dado cuenta que no soy capaz de añadir la leyenda a un gráfico > con eje secundario en ggplot2. Os paso un ejemplo reproducible para > ver si alguno puede ayudarme: > > ejex <- seq(1:20) > peso <- rnorm(20,mean=1000,sd=300) > actual <- rgamma(20,shape=seq(200,20, length.out = 20)) > propuesta <- actual + rnorm(20,3,3) > > resumen <- cbind.data.frame(ejex, peso, actual, propuesta) > > g2 <- ggplot(resumen, aes(x=factor(ejex))) + > geom_col(aes(y=peso),fill="yellow",alpha=0.5) + > geom_line(aes(y=actual*10), group=1, color="red") + > geom_line(aes(y=nueva*10), group=1, color="blue") + > scale_y_continuous(sec.axis = sec_axis(~./10), name="") > g2 > > Necesito poner las líneas correspondientes a las variables actual y > propuesta. Nada más, pero tras varios intentos, exabruptos, scales y > demás ggplot me está derrotando. Gracias. > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]