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.

ggplot: define el color para solapamientos de puntos.

Con ggplot2 quiero graficar dos vectores (vec1num, vec2num) en dos dimensiones y colorear los puntos por una variable de grupo (vec3_char). Algunos puntos se solapan.

library(ggplot2)
vec1<em>num = c(1,2,3,4,1,3,4,5,5,5)
vec2</em>num = c(1,2,3,4,1,3,4,5,5,5)
vec3_char = c("A", "B", "C", "A", "B", "C", "C", "A", "B", "C")

gráfico 1

“`{r}
ggplot(data = NULL) +
geom_point(aes(x=vec1_num, y=vec2_num, colour=vec3_char), alpha=0.4, size=4) +
scale_colour_manual(values=c(“A”=”darkblue”, “B”=”darkred”, “C”=”orange”)) +
theme(panel.grid = element_blank())


Sé que puedo atenuar la superposición reduciendo alpha o trabajando con `geom_jitter` añadiendo un poco de ruido. Así: ```{r} ggplot(data = NULL) + geom_jitter(aes(x=vec1_num, y=vec2_num, colour=vec3_char), alpha=0.4, size=4, width = 0.1) + scale_colour_manual(values=c("A"="darkblue", "B"="darkred", "C"="orange")) + theme(panel.grid = element_blank())

Sin embargo, ¿es posible utilizar el gráfico 1 pero colorear los puntos superpuestos de manera diferente? De modo que, por ejemplo, “A”=”darkblue”, “AB” = “black”, “ABC” = “grey”, “B” = “darkred”, “BC”=”pink”, “C” = “orange”. ¿Y puedo añadir también un pequeño diagrama de Venn (leyenda) que visualice la elección de color para la superposición de puntos?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible colorear de manera diferente los puntos que se superponen en ggplot2. Una forma de lograr esto es creando una nueva columna en nuestros datos que concatene los valores de vec3_char para cada observación, y luego usar esta nueva columna para asignar un color separado a los puntos que se superponen.

    “`{r}

    Crear una nueva columna concatenando vec3_char para cada observación

    df <- data.frame(vec1_num, vec2_num, vec3_char)
    df$group <- apply(df[, 3], 1, function(x) paste(sort(unique(x)), collapse = “”))

    Definir una paleta de colores para los puntos que se superponen

    overlap_colors <- c(“AB”=”black”, “ABC”=”grey”, “BC”=”pink”)

    Crear el gráfico

    ggplot(data = df) +
    geom_point(aes(x=vec1_num, y=vec2_num, colour=group), alpha=0.4, size=4) +
    scale_colour_manual(values=c(“A”=”darkblue”, “B”=”darkred”, “C”=”orange”, overlap_colors)) +
    theme(panel.grid = element_blank()) +
    guides(colour = guide_legend(override.aes = list(size=5, alpha=1, shape=22, fill=”white”)))
    “`

    En este código, primero creamos una nueva columna llamada “group” concatenando los valores de vec3_char para cada observación utilizando la función apply(). Luego, definimos una paleta de colores para los puntos que se superponen utilizando un vector nombrado, donde los nombres corresponden a las combinaciones únicas de valores de vec3_char que resultan en superposición.

    A continuación, usamos aes(color=group) en la llamada a geom_point() para colorear los puntos por la nueva columna “group”, y usamos scale_colour_manual() para asignar colores a los valores originales de vec3_char, así como a las combinaciones que se superponen.

    Finalmente, agregamos un pequeño diagrama de Venn a la leyenda utilizando guides(colour=…). Esto agrega un contorno blanco a la clave de la leyenda y la rellena con un pequeño diagrama de Venn usando el argumento shape=22. La función guide_legend() nos permite personalizar la apariencia de la leyenda, incluyendo el tamaño, la transparencia (alpha) y la forma de las claves de la leyenda.

Comments are closed.