Gráfico de Barras

Una de las alternativas más populares cuando contamos con variables cualitativas son los gráficos de barras. El alto de cada rectángulo representa la frecuencia (absoluta o relativa) de las diferentes categorías que estamos comparando. Estos gráficos son simples de construir e interpretar: mientras más extensa la barra, mayor frecuencia posee la categoría asociada.

Utilizando los datos futbol, se presenta el codigo y su correspondiente gráfico de barras.

#Paquetes Necesarios
library(vcd)
library(dplyr)
library(plotly)
library(janitor)
library(ggplot2)
library(ggalluvial)
library(ggcleveland)
library(treemapify)

a=data.frame(futbol)
a %>% mutate(longp=factor(longp, levels=c("1.21 m y +",
                             "1.11 a 1.20 m",
                             "1.01 a 1.10 m",
                             "0.91 a 1.00 m",
                             "0.81 a 0.90 m",
                             "< 0.81 m")))
#GRAFICO de BARRAS
# Para cambiar este orden usamos la funcion "factor".
a$longp = factor(futbol$longp, levels=c("1.21 m y +",
                                                    "1.11 a 1.20 m",
                                                    "1.01 a 1.10 m",
                                                    "0.91 a 1.00 m",
                                                    "0.81 a 0.90 m",
                                                    "< 0.81 m"))
Tabla <- a %>% group_by(longp)   %>% summarise(Total=n()) %>% 
  dplyr::mutate(Porcentaje = round(Total/sum(Total)*100, 0))   

ggplot(data = Tabla) +
  aes(x=longp, y = Porcentaje, fill = Porcentaje) +
    geom_bar(stat = "identity",  position="dodge")+
  geom_label( aes(label =paste0(Porcentaje, "%" )), 
              vjust = 0.5, size = 5,hjust=1,
              color = "black"
  )+
  scale_fill_continuous(low = "lightblue", high = "blue") +
  labs(x = "Longitud de pierna", y="Porcentaje") +
  coord_flip()+
  theme_bw()+
  theme(legend.position = "none")

Se observa que un 19% de los futbolistas tienen una longitud de pierna de 0.81 o menos, esta es la categoría mas frecuente entre los mismos.

Gráfico de Mosaicos

Los gráficos de mosaico son alternativas a los gráficos de barras bivariados. En este tipo de visualizaciones, el área de cada rectángulo puede interpretarse como la distribución condicional: el porcentaje de área que ocupa el rectángulo asociado a las categorías (Xi,Yj), dentro de la columna donde se encuentra, coincide con la proporción de individuos de la categoría Xi que poseen la característica Yj.

#Grafico de Mosaicos
futbol2=filter(futbol, (longp=="< 0.81 m") |(longp=="0.81 a 0.90 m"))
futbol2=mutate(futbol2,
               dist2=ifelse(futbol2$dist<50,"[30;50)","[50;115)"))
mosaic( ~ longp + dist2, data = futbol2, direction = "v", shade = TRUE)

futbol3=filter(futbol, (longp=="< 0.81 m") |(longp=="0.91 a 1.00 m"))
futbol3=mutate(futbol3,
               dist2=ifelse(futbol3$dist<50,"[30;50)","[50;115)"))
mosaic( ~ longp + dist2, data = futbol3, direction = "v", shade = TRUE)

futbol4=filter(futbol, (longp=="< 0.81 m") |(longp=="1.01 a 1.10 m"))
futbol4=mutate(futbol4,
               dist2=ifelse(futbol4$dist<50,"[30;50)","[50;115)"))
mosaic( ~ longp + dist2, data = futbol4, direction = "v", shade = TRUE)

futbol5=filter(futbol, (longp=="< 0.81 m") |(longp=="1.11 a 1.20 m"))
futbol5=mutate(futbol5,
               dist2=ifelse(futbol5$dist<50,"[30;50)","[50;115)"))
mosaic( ~ longp + dist2, data = futbol5, direction = "v", shade = TRUE)

futbol6=filter(futbol, (longp=="< 0.81 m") |(longp=="1.21 m y +"))
futbol6=mutate(futbol6,
               dist2=ifelse(futbol6$dist<50,"[30;50)","[50;115)"))
mosaic( ~ longp + dist2, data = futbol6, direction = "v", shade = TRUE)

Observamos que el p-value es muy proximo a cero en todos los test, por lo tanto rechazamos la hipótesis de independencia. Hay relacion entre la longitud de pierna y la distancia, respecto a las categorias estudiadas.

Alluvial Plots

Los diagramas alluvial tienen un objetivo similar al de los gráficos de mosaico: representar las distribuciones conjuntas y/o condicionales entre múltiples variables categóricas.

#Alluvial Plots
load("C:/Users/Carola/Downloads/cultivos.RData")

cultivos2 <- cultivos %>% 
  filter(prov=="CORDOBA"|prov=="LA PAMPA"|prov=="SANTA FE") %>%
  filter(cultivo=="Girasol"|cultivo=="Sorgo") %>%
  group_by(prov,cultivo) %>% 
  summarise(prod = sum(prod))
cultivos2=mutate(cultivos2,"Tn. (100.000)"=prod/100000)
cultivos2 %>% 
  as.data.frame() %>% 
  ggplot() + 
  aes(axis1 = prov, axis2 = cultivo, fill = `Tn. (100.000)`, y = prod) +
  geom_alluvium() + #flujos
  geom_stratum( #columnas
    fill = "black", 
    color = "lightgrey",
    width = 0.1
  ) + 
  geom_label( #etiquetas
    stat = "stratum", 
    aes(label = after_stat(stratum)),
    fill = "white",
    size = 2
  ) + 
  scale_x_discrete(limits = c("Provincia", "Cultivo"), expand = c(0, 0)) +
  scale_y_continuous(name = "Produccion en (100.000 Tn.)", breaks = seq(0, 15,5))+
  scale_fill_continuous(low = "yellow", high = "red")

Treemaps

Un treemap es un tipo de gráfico de mosaico donde el área de cada rectángulo se asocia a su frecuencia, o bien a otra variable numérica de interés

titanic=as.data.frame(Titanic)
titanic=mutate(titanic,Survived=ifelse(Survived=="No","No Sobrevivió","Sobrevivió"))

titanic2 <- titanic %>% 
  group_by(Class, Survived) %>% 
  summarise(Freq = sum(Freq)) %>% 
  ungroup()

titanic_tot <- titanic2 %>% 
  group_by(Class) %>% 
  summarise(Freq = sum(Freq))%>%
  ungroup() %>% 
  rename(Survived = Class) %>% 
  mutate(Class = "Total Titanic") %>%
  bind_rows(titanic2)%>%
  mutate(etiq = ifelse(Class != "Total Titanic",
                       paste0(Survived, "_", Class),
                       as.character(Survived)))
plot_ly(
  type = "treemap",
  labels = titanic_tot$etiq, #variable de menor jerarqua (etiqueta única)
  parents = titanic_tot$Class, #variable de mayor jerarquia
  values = titanic_tot$Freq, #tamaño de cada rectangulo
  hoverinfo = "label+value+percent parent+percent root",
  textinfo = "label+value+percent parent+percent root"
)%>%
  add_trace(branchvalues = "total", name = "")

Georreferencia

#Mapas
library(sf)
library(tmap)

#Varios
library(dplyr)
library(tidyr)
library(readxl)
library(ggplot2)
library(stringr)

#Carga de los datos

library(spData)
data(world)
world1 <- world[with(world, order(world$continent)), ]
america_del_sur<-world1[165:177, ]

Paquete sf

#paquete sf
ggplot(data = america_del_sur) +
  aes(fill = lifeExp) +
  geom_sf() +
  scale_fill_gradient(low = "red", high = "green") +
  theme_bw() +
  ggtitle("Esperanza de Vida (en Años) por País - Datos 2014")

Paquete tmap

#paquete tmap
world1 <- world[with(world, order(world$continent)), ]
africa<-world1[1:51, ]

tmap_mode("view") #Modo Interactivo

mapa_funcion <- function(x) {
  africa %>% 
    st_transform(crs = "+proj=longlat +datum=WGS84") %>% #modificamos proyecci?n
    select(gdpPercap = {{x}}, name_long) %>% #filtramos por regi?n
    tm_shape() + 
    tm_borders("black", lwd = 2) + 
    tm_polygons(col = "gdpPercap", legend.show = TRUE) +
    tm_text(text = "name_long", size = 0.5) +
    tm_style("cobalt")
}
tmap_mode("plot")
## tmap mode set to plotting
tmap_arrange(
  mapa_funcion("gdpPercap"),
ncol = 1
)