Archivo de la categoría: Gráficos

No estamos igual que en la primera ola de COVID

Me cuesta hablar sobre COVID porque creo que hay voces con más conocimiento y mejor preparadas que la mía para opinar sobre el tema. Pero en los últimos tiempos leo algunas cosas que me empiezan a calentar y vuelvo a pensar que a lo mejor mi voz si debió ser escuchada. El caso es que hay una línea de opinión que argumenta que estamos más o menos igual que en el momento de aparición del virus, algo que llamamos primera ola frente a segunda ola, que las medidas no han funcionado siempre con el argumento “yo no soy contrario a pero en la Universidad de Nabucodonosor salió un estudio que”. Sería bajo y de mala educación por mi parte insinuar que son unos gilipollas y por eso prefiero presentar un pequeño código de R para que podáis leer los datos de MoMo del Instituto Carlos III:

library(tidyverse)
library(lubridate)
df <- read.csv("https://momo.isciii.es/public/momo/data")

df <- df %>% filter(ambito=='nacional' & nombre_sexo=='todos' & cod_gedad=='all') %>% 
  mutate(fecha_defuncion=as.Date(fecha_defuncion, '%Y-%m-%d')) %>%
  filter(year(fecha_defuncion)>=2020)


df <- df %>% mutate(ola = case_when(
  fecha_defuncion <= as.Date("2020-03-07") ~ 'Anteriores',
  fecha_defuncion <= as.Date("2020-05-07") ~ 'Primera ola',
  fecha_defuncion <= as.Date("2020-08-01") ~ 'Verano',
  TRUE ~ 'Segunda ola'),
  exceso = defunciones_observadas - defunciones_esperadas)

ggplot(data=df, aes(x=fecha_defuncion, y=defunciones_observadas,group=ola, fill=ola, color=ola)) + geom_line() +
  geom_line(aes(x=fecha_defuncion, y=defunciones_esperadas), color="grey")
 
df %>% group_by(ola) %>% summarise(exceso = sum(exceso))

Comentarios: No tengo ni idea del número de muertes que provoca el COVID (no soy el único) por eso fijo el término exceso como el número observado – número esperado, las fechas de las olas me las he imaginado y he querido poner un par de meses llamados verano en los que veníamos del periodo de confinamiento. Ejecutad el código y…


ola exceso

1 Anteriores -1653.
2 Primera ola 44243.
3 Segunda ola 21730
4 Verano 1059.

Eso no es estar igual.

Añadiendo gráficos de tarta a nuestros mapas de ggplot con scatterpie

Los gráficos de tarta o pie charts tienen algunos peligros y el ahora escribiente no es muy partidario de su uso, sin embargo la librería scatterpie facilita mucho su realización en R y quería traer al blog un método más o menos sencillo para entender como hacer el gráfico y como disponer los datos.

Obtención del shp con el mapa

Se comienza por realizar un mapa sin nada con ggplot y raster que a los seguidores de los artículos de R del blog les será familiar:

library(scatterpie)
library(tidyverse)
library(raster)

Espania <- getData('GADM', country='Spain', level=1)
Espania$name = Espania$NAME_1

mapa.comunidades <- map_data(Espania)

Se obtiene el shp con el mapa por Comunidades de GADM, el nivel de Comunidad Autónoma es el 1, para crear un data frame que emplear en ggplot necesitamos un campo name que la función map_data transformará en region, en este paso recomiendo usar como name el campo que más sencillo sea de cruzar, habitualmente códigos porque los nombres de las Comunidades Autónomas son un follón. En este caso si se emplea el nombre para entender mejor los datos necesarios para crear los gráficos de bolas y que el código sea reproducible (con las cositas del wordpress).

Pintar un mapa sin nada

A la hora de pintar el mapa se va a emplear geom_map, habitualmente se usa geom_polygon:

mapa.comunidades <- mapa.comunidades %>% mutate(lat=case_when(
  region %in% c('Islas Canarias') ~ lat + 6,
  TRUE ~ lat),
  long=case_when(
    region %in% c('Islas Canarias') ~  long + 6,
    TRUE ~long))

mapa <- ggplot(data = mapa.comunidades, aes(x = long, y = lat)) +
  geom_map (map= mapa.comunidades, aes(map_id=region), fill=NA, color="grey50") +
  labs(title = "Mapa sin nada") + 
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank()) +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        axis.title.y=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank())
mapa

Como sabéis ggplot es perfectamente modulable y podéis elegir colores de fondo, colores de línea, ubicación de títulos,… muchas veces tantas posibilidades pueden provocar que nos perdamos. Si recomiendo en estos gráficos eliminar los ejes y los textos de los ejes.

Datos para los piechart

Para las tartas se prefiere simular datos. En el ejemplo vamos a realizar una tarta para cada comunidad y el tamaño de la tarta tendrá una escala determinada.

#Datos por comunidad
comunidades <- data.frame(region = unique(mapa.comunidades$region)) 
comunidades$proporcion_1 <- round(runif(nrow(comunidades)),2)
comunidades$proporcion_2 <- 1 - comunidades$proporcion_1

#Nos inventamos una escala para el tamaño de la bola
comunidades$escala <- rpois(nrow(comunidades), 2) + 1

Cada comunidad autónoma tiene 2 proporciones y se crea un campo escala para definir el radio del gráfico de tarta, los datos tienen que tener disposición de columna. Ahora se ha de ubicar cada piechart dentro del mapa y para ello se opta por una solución sencilla, ubicarla en el punto medio por Comunidad Autónoma:

#Necesitamos ubicar cada comunidad, en el centro del objeto
ubicacion <- mapa.comunidades %>% group_by(region) %>% summarise(lat=mean(lat), long=mean(long))

comunidades <- left_join(comunidades, ubicacion)

Ahora el data frame comunidades tiene una latitud y una longitud para ubicar cada piechart. Ahora sólo es necesario realizar el mapa.

Mapa final

Y el mapa con el que comienza la entrada se realiza con este sencillo código:

mappie <- mapa + labs(title = "No uséis bolas") +
  geom_scatterpie(data = comunidades, aes(x=long, y=lat, group = region, r = escala/50 * 6),
                  cols = c('proporcion_1', 'proporcion_2'), 
                  legend_name = "Leyenda")

mappie

geom_scatterpie necesita los datos, la posición y la region, el tamaño, el radio del gráfico lo especificamos con r y siempre irá multiplicado por 6 (por temas de escala). En cols es necesario especificar las variables a representar, en este caso solo tenemos 2 proporciones, son pocos parámetros complejos y la solución no es mala si no fuera por que se tratan de gráficos de tarta. Saludos.