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.

Agregando el nombre de un grupo en el eje y en negrita a un gráfico de barras de error horizontal, cambiando los espacios entre etiquetas y agregando una columna de texto adicional.

Tengo datos sobre 2 modelos de regresión (ambos con una estimación correspondiente con los extremos inferiores y superiores de un CI). Ambos modelos incluyen 3 variables (edad, sexo y hábito de fumar). La variable term (correspondiente a las variables en el modelo) está ordenada de modo que aparece en el orden que he especificado.

Los datos se presentan de la siguiente manera:

library(tidyverse)
library(ggplot2)

mydata <- structure(list(term = structure(c(1L, 1L, 2L, 2L, 3L, 4L, 4L, 
5L, 5L), .Label = c("Edad (años)", "Sexo (hombre)", "Nunca fumar (referencia)", 
"Fumador actual", "Fumador anterior", ">90 (referencia)", "60-89", 
"<60"), class = c("ordered", "factor")), estimate = c(1.5, 2.2, 
0.7, 1.8, 1, 1.5, 2.2, 0.7, 1.6), conf<em>bajo</em> = c(1.3, 1.8, 0.9, 
1, 1, 1.3, 1.8, 0.9, 1), conf<em>alto</em> = c(1.7, 2.6, 0.5, 2.6, 1, 
1.7, 2.6, 0.5, 2.4), model = structure(c(1L, 2L, 1L, 2L, NA, 
1L, 2L, 1L, 2L), .Label = c("Modelo 1", "Modelo 2"), class = c("ordered", 
"factor")), label = structure(c(3L, 6L, 1L, 5L, 2L, 3L, 6L, 1L, 
4L), .Label = c("0.7 (0.9-0.5)", "1.0 (1.0-1.0)", "1.5 (1.3-1.7)", 
"1.6 (1.0-2.4)", "1.8 (1.0-2.6)", "2.2 (1.8-2.6)"), class = "factor")), row.names = c(NA, 
-9L), class = c("tbl_df", "tbl", "data.frame"))

head(mydata)

Y he creado el siguiente gráfico:

ggplot(data=mydata, 
       aes(x=estimate, 
           y=fct_rev(term), 
           color=model)) + 
  geom_point(position=position_dodge(width=0.3)) + 
  geom_errorbarh(aes(xmin=conf_bajo, xmax=conf_alto, height=0.15), position=position_dodge(width=0.3))

Ahora intento lograr dos cosas que no puedo hacer:

  1. Me gustaría agregar un título/nombre de variable sobre Nunca fumar (referencia) en el gráfico en el eje Y, de modo que justo encima de esa etiqueta diga Estado de fumador (en negrita). Podría agregar otra fila al marco de datos original, pero la distancia entre el título y “nunca fumar” será bastante grande. ¿Hay alguna forma de agregar un título de otra manera o de ajustar la distancia específica entre ciertas etiquetas en el eje Y?

  2. También hay una columna label en el conjunto de datos que corresponde a la estimación y el 95 %CI. Me gustaría agregar esto como una columna adicional a la derecha del gráfico, de modo que estén a la misma altura que sus correspondientes puntos/barras de error.

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un título al eje Y, podemos agregar una anotación personalizada utilizando la función annotate(). Primero, creamos una nueva variable term2, donde reemplazamos la etiqueta Never smoking (reference) con el título deseado. Luego, usamos annotate() para agregar una etiqueta de texto sobre la posición y correspondiente:

    “`{r}

    Reemplazamos ‘Never smoking (reference)’ con ‘Smoking Status’

    mydata$term2 <- as.character(mydata$term)
    mydata$term2[mydata$term2 == “Never smoking (reference)”] <- “Smoking Status

    Agregar título al eje Y

    ggplot(data=mydata,
    aes(x=estimate,
    y=fct_rev(term2), # Usar la nueva variable con etiquetas personalizadas
    color=model)) +
    geom_point(position=position_dodge(width=0.3)) +
    geom_errorbarh(aes(xmin=conf_low, xmax=conf_high, height=0.15), position=position_dodge(width=0.3)) +
    annotate(geom = “text”, x = -1.5, y = fct_rev(“Smoking Status“), label = “Smoking Status“, fontface = “bold”, hjust = 0)


    Para agregar la columna `label` como una columna adicional a la derecha del gráfico, podemos usar la función `geom_text()`. Necesitamos especificar los valores de x e y para las etiquetas y ajustar la alineación (`hjust` y `vjust`) para que se vean bien. También necesitamos especificar el argumento `fill` para agregar un pequeño rectángulo detrás de las etiquetas: ```{r} # Agregar columna de etiquetas en la derecha ggplot(data=mydata, aes(x=estimate, y=fct_rev(term2), color=model)) + geom_point(position=position_dodge(width=0.3)) + geom_errorbarh(aes(xmin=conf_low, xmax=conf_high, height=0.15), position=position_dodge(width=0.3)) + annotate(geom = "text", x = -1.5, y = fct_rev("**Smoking Status**"), label = "**Smoking Status**", fontface = "bold", hjust = 0) + geom_text(aes(x = conf_high + 0.2, y = fct_rev(term2), label = label), size = 3.5, hjust = 0, vjust = -0.5, fill = "white")

    Esto nos da el siguiente gráfico:

    [![enter image description here][2]][2]

Comments are closed.