es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyenda personalizada de ggplot por grupo

Quiero crear un gráfico como el siguiente pero con una leyenda personalizada por grupo. Tengo dos muestras llamadas A y B y un objetivo (Y) asociado. Lo que quiero es agrupar la leyenda de un lado:
muestra A: verdadero vs observado
y del otro lado
muestra B: verdadero vs observado
con la forma y el color correspondiente.
A continuación, esto es lo que ya tenía.

library(ggplot2)
sites = rep(seq(0.55,0.58,0.01), times = 4)
sites = sort(sites)

org = rep(c("Y_A", "Y_A_obs", "Y_b", "Y_b_obs"), times = 4)
values = rnorm(16)

df = data.frame(sites = sites, origine = org, values = values)

ggplot(df, aes(x=sites, y=values, color=origine)) + 
  geom_point(aes(shape=origine, color=origine), size=3)+
  scale_shape_manual(values=c(0, 15, 2, 17))+
  scale_color_manual(values=c("blue", "purple", "red", "orange"))

enter image description here

Y esto es lo que quiero:
enter image description here

¡Gracias por cualquier ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear la leyenda personalizada con agrupamiento, podemos modificar el código de la siguiente manera:

    “`{r}
    library(ggplot2)

    sites = rep(seq(0.55,0.58,0.01), times = 4)
    sites = sort(sites)

    org = rep(c(“Y_A”, “Y_A_obs”, “Y_b”, “Y_b_obs”), times = 4)
    values = rnorm(16)

    df = data.frame(sites = sites, origine = org, values = values)

    ggplot(df, aes(x=sites, y=values, color=origine)) +
    geom_point(aes(shape=origine, color=origine), size=3)+

    # Agrupar la leyenda por muestra
    scale_shape_manual(values=c(0, 15, 2, 17),
    guide=guide_legend(title=”Leyenda por Muestra”,
    nrow=2, byrow=T))+

    scale_color_manual(values=c(“blue”, “purple”, “red”, “orange”),
    guide=guide_legend(title=NULL,
    nrow=2, byrow=T,
    label=c(“A verdadero”, “A obs”,
    “B verdadero”, “B obs”),
    override.aes=list(shape=c(0,15),
    color=c(“blue”, “purple”,
    “red”, “orange”))))
    “`

    En este código, utilizamos la función guide_legend() para agrupar la leyenda por muestra, con los argumentos nrow y byrow controlando la disposición de la leyenda. También establecemos las etiquetas y formas/colores para cada elemento de la leyenda usando los argumentos label y override.aes. Cabe destacar que establecemos el argumento title como NULL en la función scale_color_manual() para eliminar el título predeterminado de la leyenda.

Comments are closed.