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 | |
|---|---|---|---|
| 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 |
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 | |
|---|---|---|---|
| 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")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")