Introducción

El objetivo de este documento es realizar un bar chart race para visualizar la evolución de los casos de Covid 19 en el mundo.

Librerías

Estos son los paquetes que vamos a utilizar en este documento:

library(tidyverse)
library(lubridate)
library(gganimate)
library(gifski)
library(covdata)
library(RColorBrewer)
library(Cairo)

Data

Vamos a utilizar los datos de la Universidad Johns Hopkins que están disponibles en su paquete covdata.

Como el objetivo es visualizar el TOP 15 países con mayor cantidad de casos de Covid 19 en el mundo, hay que crear una variable con el ranking de casos por día y luego filtrar por posición.

covid <- covnat %>%
  group_by(date) %>%
  arrange(date, desc(cu_cases)) %>%
  mutate(ranking = row_number()) %>%
  filter(ranking <=15)

Países

El siguiente paso es observar cuáles son los países que aparecen para ver su nombre completo y editarlo en el caso de que sea muy largo.

unique(covid$cname)
##  [1] "China"                     "Afghanistan"              
##  [3] "Algeria"                   "Armenia"                  
##  [5] "Australia"                 "Austria"                  
##  [7] "Azerbaijan"                "Bahrain"                  
##  [9] "Belarus"                   "Belgium"                  
## [11] "Brazil"                    "Cambodia"                 
## [13] "Canada"                    "Croatia"                  
## [15] "Czech Republic"            "Thailand"                 
## [17] "Japan"                     "Korea, Republic of"       
## [19] "Taiwan, Province of China" "United States"            
## [21] "Singapore"                 "Viet Nam"                 
## [23] "France"                    "Malaysia"                 
## [25] "Nepal"                     "United Arab Emirates"     
## [27] "Germany"                   "Italy"                    
## [29] "India"                     "United Kingdom"           
## [31] "Iran, Islamic Republic of" "Kuwait"                   
## [33] "Spain"                     "Switzerland"              
## [35] "Norway"                    "Netherlands"              
## [37] "Sweden"                    "Denmark"                  
## [39] "Portugal"                  "Turkey"                   
## [41] "Russian Federation"        "Peru"                     
## [43] "Saudi Arabia"              "Chile"                    
## [45] "Mexico"                    "Pakistan"                 
## [47] "South Africa"              "Colombia"                 
## [49] "Bangladesh"                "Argentina"
covid$cname <- gsub("Taiwan, Province of China", "Taiwan", covid$cname)
covid$cname <- gsub("Iran, Islamic Republic of", "Iran", covid$cname)
covid$cname <- gsub("Russian Federation", "Russia", covid$cname)
covid$cname <- gsub("Korea, Republic of", "South Korea", covid$cname)
covid$cname <- gsub("United Arab Emirates", "UAE", covid$cname)

Paleta de Colores

Para mejorar la calidad de visualizacion, voy a crear una paleta de colores a partir de un set existente de RColorBrewer.

nb.cols <- 50
mycolors <- colorRampPalette(brewer.pal(12, "Paired"))(nb.cols)

Bar Chart Race

Primero definimos el ggplot como un objeto:

a <- ggplot(covid)+
  geom_col(aes(ranking,cu_cases,fill=cname))+
  scale_fill_manual(values=mycolors)+
  geom_text(aes(ranking,cu_cases,label=as.factor(cu_cases)),hjust=-0.1,size=5)+
  geom_text(aes(ranking, y=0 , label = cname), hjust=1.1,size=5) + 
  geom_text(aes(x=15, y=max(cu_cases) , label = as.factor(date)), vjust = 0, hjust=1, alpha = 0.1,  col = "black", size = 20)+
  labs(title = "Evolución de los casos positivos de Covid-19 en el mundo",
       subtitle = "Autor: Jonathan Rzezak con datos de la Universidad Johns Hopkins",
       x=NULL,
       y=NULL)+
  coord_flip(clip = "off")+
  scale_x_reverse()+
  theme_minimal()+
  theme(legend.position = "none",
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.y = element_blank(),
        axis.text.x = element_blank(),
        plot.title = element_text(hjust = 0, size=20,face="bold"),
        plot.subtitle = element_text(hjust = 0, size=12, face="italic"),
        plot.margin = margin(1, 4, 1, 3, "cm"))+
  transition_states(date,transition_length = 1,state_length = 0,wrap = FALSE)

Luego creamos la visualizacion con gganimate:

animate(a,
        nframes = 800,
        fps = 24,
        end_pause = 50,
        width = 1000,
        height = 600,
        type = "cairo")

 


Elaborado por Jonathan Rzezak