Gráfico de tornado

LLamados también diagramas de mariposas son gráficos que permiten una visualización de gráficos de barras horizontales con variables categóricas en el eje y con un ordenamiento jerárquico en función a la magnitud de los valores de la variable numérica.

En el siguiente ejemplo se tiene una relación de trabajadores donde se indica la cantidad de dosis de una vacuna que se administraron a lo largo de los años y una variable binomial que corresponde a si entregaron un documento, que certifique su estado de vacunación, ( en pdf) a la organización.

tabla <- read.csv(file = "dosis.csv", header = T)
tabla
X Nombres Dosis pdf
1 Wilber 2 1
2 Freddy 2 1
3 Gustavo 2 0
4 Jorge 3 0
5 Arturo 3 0
6 Orlando 3 0
7 Nicoll 3 1
8 Jimmy 3 1
9 Bryan 3 1
10 Henrry 3 0
11 Ismael 4 0
12 Juan 4 1
13 Licet 4 0

Primera forma

El gráfico de tornado con los datos anteriores puede desarrollarse de la manera siguiente:

Luego de activar la librería tidyverse se realiza un cambio de signo a los valores de dosis de los trabajadores en función si presentan valor de 0 o 1 en la variable pdf y luego se realiza el cambio de etiquetas a si y no en la variable binomial mencionada anteriormente:

# Cambio en las etiquetas de los niveles de la variable pdf:
tabla$pdf <- factor(tabla$pdf, labels = c( "0"="No","1"="Si"))
# Cambio de los valores de dosis en funicón a los valores de la variable pdf:
tabla$Dosis <- ifelse(tabla$pdf=="No", tabla$Dosis*-1, tabla$Dosis)
tabla
X Nombres Dosis pdf
1 Wilber 2 Si
2 Freddy 2 Si
3 Gustavo -2 No
4 Jorge -3 No
5 Arturo -3 No
6 Orlando -3 No
7 Nicoll 3 Si
8 Jimmy 3 Si
9 Bryan 3 Si
10 Henrry -3 No
11 Ismael -4 No
12 Juan 4 Si
13 Licet -4 No
# Graficando con ggplot 2

tabla %>% ggplot()+ geom_col(aes(reorder(Nombres, Dosis), Dosis, fill=pdf)) +
  coord_flip()+
  scale_y_continuous(breaks = seq(-4,4,1), labels = c(4:0,1:4))+
  theme(panel.grid.major = element_line(colour = "gray70",size = 0.1),
        panel.grid.minor = element_line(linetype = "blank"),
        axis.title = element_text(face = "bold"),
        axis.text = element_text(face = "bold"),
        plot.title = element_text(face = "bold.italic", hjust = 0.5),
        panel.background = element_rect(fill = NA),
        legend.key = element_rect(fill = NA),
        legend.background = element_rect(fill = NA),
        legend.position = "top", legend.direction = "horizontal") +
  labs(title = "Número de dosis por cada integrante",
       x= "Nombres",
       fill="¿Dió pdf? * ",
       caption = "* Las personas que no dieron pdf son las personas que no entregaron \n certificado de vacunación virtual")

Segunda forma

t2 <- tabla %>% group_by(pdf, Dosis) %>% mutate(dosis=if_else(pdf=="0", -Dosis, Dosis))
orden <- t2 %>% arrange(pdf)

ggplot(data=t2, aes(x=Nombres, dosis, group =factor(pdf), fill=factor(pdf)))+
  geom_bar(stat = "identity")+ coord_flip()+
  scale_x_discrete(limits=orden$Nombres) + 
  scale_y_continuous(breaks = seq(-4,4,1), labels = c(4:0,1:4))+
  theme(panel.grid.major = element_line(colour = "gray70",size = 0.1),
        panel.grid.minor = element_line(linetype = "blank"),
        axis.title = element_text(face = "bold"),
        axis.text = element_text(face = "bold"),
        plot.title = element_text(face = "bold.italic", hjust = 0.5),
        panel.background = element_rect(fill = NA),
        legend.key = element_rect(fill = NA),
        legend.background = element_rect(fill = NA),
        legend.position = "top", legend.direction = "horizontal") +
  labs(title = "Número de dosis por cada integrante",
       x= "Nombres",
       fill="¿Dió pdf? * ",
       caption = "* Las personas que no dieron pdf son las personas que no entregaron \n certificado de vacunación virtual")