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.

Añadiendo datos de etiquetas a los ejes del gráfico de sankey con el paquete ggalluvial.

Cómo puedo agregar nombres de etiquetas en los cuadros blancos a cada uno de los tres ejes en el gráfico de sankey ggalluvial a partir del dataframe? (vea la imagen)

La columna “Country” tiene observaciones para múltiples países. En el ejemplo a continuación, me estoy enfocando en Irlanda, que tiene la etiqueta “IE”. ¿Cómo puedo extraer el nombre del país del dataframe usando el código ggplot a continuación? También realizaré esta tarea para los nombres “Vaccine” y “TargetGroup”, por lo que si la solución puede incluir estas columnas también, estaría agradecido. Gracias.

Código del dataframe y colores del sankey: los datos provienen de EU ECDC.

data <- read.csv("https://opendata.ecdc.europa.eu/covid19/vaccine_tracker/csv/data.csv", na.strings = "", fileEncoding = "UTF-8-BOM")
colnames(data)[2] <- "Country"
TestData <- data
Ireland <- subset(TestData, Country == "IE")
Combined <- rbind(Ireland ) #se eliminaron otros países para facilitar la lectura
Col1 <- "slateblue2"
Col2 <- "chartreuse2"
Col3 <- "tomato2"
Col4 <- "orange2"
Col5 <- "plum3"
Col6 <- "grey43"
Col7 <- "deeppink"
alpha <- 0.2

Este es el código de sankey, aquí es donde NO estoy aplicando correctamente las etiquetas a los ejes correspondientes

ggplot(Combined,
       aes(weight = FirstDose, axis1 = Vaccine, axis2 = Country, axis3 = TargetGroup)) +
  geom_alluvium(aes(fill = Vaccine, color = Vaccine), 
                width = 0.1, alpha = alpha, knot.pos = 0.4) +
  geom_stratum(width = 0.2, color = "black") +
  geom_label(stat = "stratum", label.strata = TRUE) +
  scale_x_continuous(breaks = 1:3, labels = c("Vaccine", "Country", "TargetGroup"))     +
  scale_fill_manual(values  = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  scale_color_manual(values = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  ggtitle("Datos de vacunación de ECDC") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(size = 12, face = "bold")
  )

Esta es la imagen: puedes ver que faltan las etiquetas de los ejes.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar nombres de etiquetas en los cuadros blancos a cada uno de los tres ejes en el gráfico de sankey ggalluvial, puedes usar la función geom_text() en ggplot2. Aquí hay un código actualizado que agrega etiquetas a cada uno de los tres ejes:

    ggplot(Combined,
           aes(weight = FirstDose, axis1 = Vaccine, axis2 = Country, axis3 = TargetGroup)) +
      geom_alluvium(aes(fill = Vaccine, color = Vaccine), 
                    width = 0.1, alpha = alpha, knot.pos = 0.4) +
      geom_stratum(width = 0.2, color = "black") +
      geom_text(stat = "stratum", aes(label = ifelse(stratum == "", "", stratum)), 
                size = 3, nudge_y = 0.25) +
      scale_x_continuous(breaks = 1:3, labels = c("Vaccine", "Country", "TargetGroup"))     +
      scale_fill_manual(values  = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
      scale_color_manual(values = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
      ggtitle("Datos de vacunación ECDC") +
      theme_minimal() +
      theme(
        axis.text.x = element_text(size = 12, face = "bold"),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.line.y = element_blank(),
        panel.grid.major.y = element_blank()
      )
    

    En la función geom_text(), especificamos que la etiqueta sea a) el valor de stratum si no es una cadena vacía, y b) una cadena vacía si es una cadena vacía (lo cual corresponde a los cuadros blancos en el diagrama de sankey).

    Ten en cuenta que también hemos agregado algunos elementos de estilo para eliminar las etiquetas y marcas predeterminadas del eje y (que corresponden a los diferentes niveles del alluvium) y deshabilitar las líneas de la cuadrícula del eje y. Esto dejará solo los cuadros blancos con las etiquetas deseadas.

    El gráfico resultante se verá así:

    sankey with axes labels

Comments are closed.