El control de la expansión del coronavirus Sars-COV-2 presenta serios desafíos para los sistemas sanitarios de todo el mundo, por lo que resulta importante el poder identificar y cuantificar la afectacción de las distintas zonas o niveles geo-políticos de manera a tomar decisiones adecuadas teniendo en cuenta cada situación en particular (Población y estado del sistema sanitario a nivel local principalmente).
Es así que se plantea el problema del análisis y reporte automatizado con un enfoque geográfico, de manera a contar con información cuantificada en diferentes niveles que reflejen el desarrollo de la pandemia a nivel local (relativamente). En ese sentido, se ha desarrollado este script tratando de proveer la mayor cantidad de información relevante a cada escala de trabajo, en el caso de Paraguay.
El objetivo principal del script es el de cuantificar e ilustrar la cantidad de casos confirmados acumulados y la cantidad de casos activos nivel de distritos, así también se presentan datos como el total de ambas variables a la fecha de actualización y un gráfico de barras presentando de manera descendente las unidades geográficas con mayor cantidad de casos confirmados.
El flujo de trabajo fue le siguiente:
#load libraries
##Library
library(sf) # Manejo de datos vectoriales
library(RColorBrewer) # Paletas
library(tidyverse) # Procesamiento datos
library(readxl) ## Importar datos excel
library(ggplot2) # Visualizaciones, mapas
library(ggspatial) # No
library(ggrepel)
library(scales)
knitr::opts_knit$set(root.dir = normalizePath('C:/Users/carli/Google Drive/Proyecto_especializacion/directorio'))
# Se creo un objeto espacial el cual corresponde a los datos vectoriales de departamentos
dpto_shape <-
read_sf('SHAPEFILES/wgs84_projected/covid_py_dptos.shp',
stringsAsFactors = FALSE)
# Se creo un objeto espacial el cual corresponde a los datos vectoriales de distritos
# Además, se agrega un campo conteniendo el código del Dpto. y distrito de manera a identificar cada distrito de manera única
dist_shape <-
read_sf('SHAPEFILES/wgs84_projected/covid_py_dist.shp',
stringsAsFactors = FALSE) %>% mutate(dpto_dist_cod = paste(dpto_cod, dist_cod, sep = '_'))
##Capas de puntos
# Objeto espacial de puntos correspondiente a los centroides de los polígonos del archivo shapefile de departamentos
dpto_points <-
read_sf('SHAPEFILES/wgs84_projected/covid_py_dpto_points.shp',
stringsAsFactors = FALSE)%>% mutate(dpto_desc = ifelse(dpto_desc=="ÑEEMBUCU", "ÑEEMBUCU", dpto_desc))
# Objeto espacial de puntos correspondiente a los centroides de los polígonos del archivo shapefile de distritos
# Además, se agrega un campo conteniendo el código del Dpto. y distrito de manera a identificar cada distrito de manera única
dist_points <-
read_sf('SHAPEFILES/wgs84_projected/covid_py_dist_points.shp',
stringsAsFactors = FALSE) %>% mutate(dpto_dist_cod = paste(dpto_cod, dist_cod, sep = '_'))
# Objeto conteniendo los registros de casos de COVID-19 en Paraguay obtenidos del Ministerio de Salud Pública y Bienestar Social
# Aquí siempre es importante verificar el archivo de entrada, pues el mismo va siendo modificado en términos de formato por la misma fuente (MSyBS), principalemte separadores y formato de fecha
datos_brutos <-
data.frame(
read.csv(
"Descargar_datos_Datos_completos_data.csv",
sep = ';',
encoding = "UTF-8",
stringsAsFactors = FALSE
)
)
Se procesaron los datos importados de los shapefile, preparandolos para agregarlos luego con los datos de las variables de COVID-19
# Creación de un dataframe alojando los datos de coodernadas de cada unidad a mapear (Los puntos son los centroides de los polígonos de cada distrito, departamento y zona)
dpto_cords <-
rename(
dpto_points,
dpto_desc = dpto_desc,
dpto_cod = dpto_cod,
"lon_dpto" = lon,
"lat_dpto" = lat
) %>% select(dpto_desc, dpto_cod, lon_dpto, lat_dpto)## Se extraen las variables de dpto y dist desc y cod
dist_cords <-
rename(
dist_points,
dist_desc = dist_desc,
dpto_dist_cod = dpto_dist_cod,
"lon_dist" = lon,
"lat_dist" = lat
) %>% select(dist_desc, dpto_dist_cod, lon_dist, lat_dist)
#Renombrando los campos de la base de datos descargada de Salud
datos_covid <- rename(
datos_brutos,
fecha = Fecha.Confirmacion, # Debido a los frecuentes inconvenientes con este campo, es altamente recomendable trabajarlo de manera a eliminar previamente las fuentes posibles de error
sexo = Sexo,
dpto_desc = Departamento.Residencia,# Nombre del departamento
dist_desc = Distrito.Residencia,#Nombre del distrito
albergue = En.Albergue.,# Si el caso corresponde a casos de albergues o fuera de albergues (comunitarios)
dist_cod = Cod.Distrito, # Código entero que identifica al distrito de residencia dentro de su departamento
dpto_cod = Cod.Dpto, # Código entero que identifica al deparatamento de residencia del caso
edad = Edad # Edad del afectado
)
# Se seleccionan y transforman los datos de manera a poder procesarlos por cada unidad espacial (Distritos, departamentos y zonas epidemiológicas)
# Siempre verificar los datos de fecha principalmente...
datos_covid_py <- select(datos_covid,
fecha,
sexo,
dpto_desc,
dist_desc,
albergue,
dist_cod,
dpto_cod,
edad) %>% mutate(
# Se cammbia el formato del campo fecha, de cadena a Date y se establece que es que (mes, día, año) en el formato específico
fecha = as.Date(fecha, "%d/%m/%Y"), # Importante: Verificar el formato de entrada, en caso de que se haya modificado simplemente cambiar la interpretacion segun sea %d: dia, %m: mes, %Y: año
# Se crea un campo para identificar los distritos de cada registro
dpto_dist_cod = paste(dpto_cod, dist_cod, sep = '_'),
dpto_desc = ifelse(dpto_desc=="ÑEEMBUCU", "ÑEEMBUCU", dpto_desc)) %>% mutate(
# Se calcula si el caso esta activo, esto se realiza tomando la fecha de confirmación del caso y sumando 21 días, luego se compara con la fecha del sistema
activo = ifelse((fecha + 21) < Sys.Date(), 0, 1),
# Se calcula la fecha del último día actividad, y se asigna a menos que dicha fecha sea mayor a la fecha del sistema, en cuyo caso se asigna la fecha del sistema
fecha_activo = ifelse((fecha + 21) < Sys.Date(),
as.character((fecha + 21)),
as.character(Sys.Date()))
) %>% mutate(
# Se asigna la semana iso de la última fecha de actividad del registro
iso_last = as.integer(fecha_activo %>% strftime(format = "%V")),
dpto_dist_cod = paste(dpto_cod, dist_cod, sep = '_')
)%>% filter(datos_covid$albergue == "NO")
En esta sección los datos transformados se agrupan y cuantifican por unidad geográfica (Departamentos y distritos), así también se determina la predominancia de ciertas variables en cada localidad. Las variables trabajadas son:
Finalmente a cada objeto creado se agregan los campos correspondientes a las coordenadas de los centroides de polígonos de las unidades geográficas
# Se agregan los datos de acuerdo al nivel a mapear
datos_dptos <-
datos_covid_py %>% group_by(dpto_cod) %>% summarise(##Se agrupan los registros por departamentos en este caso 12 departamentos
"cant_casos" = n(),
##Se cuenta el número de registros de agrupación
"activo" = sum(as_tibble(activo))) %>% mutate(cant_casos = replace_na(cant_casos, 0)) %>% merge(dpto_cords, by = 'dpto_cod') %>% select(-geometry)## Se agregan las coordenadas de centroides de cada departamento
## Resumen por distritos----
datos_dist <-
datos_covid_py %>% group_by(dpto_dist_cod) %>% summarise("cant_casos" = n(),
"activo" = sum(as_tibble(activo)), ) %>% mutate(cant_casos = replace_na(cant_casos, 0)) %>% merge(dist_cords, by = 'dpto_dist_cod') %>% select(-geometry)
# Se realiza un join entre los sets procesados y los archivos espaciales----
#Poligonos
dpto_shape1 <-
merge(dpto_shape, datos_dptos, by = 'dpto_cod', all.x = TRUE) %>% mutate(cant_casos = replace_na(cant_casos, 0)) %>% rename(dpto_desc = dpto_desc.x)
dist_shape1 <-
merge(dist_shape, datos_dist, by = "dpto_dist_cod", all.x = TRUE) %>% rename(dist_desc = dist_desc.x)
#Puntos
dpto_points1 <-
merge(dpto_points, datos_dptos, by = 'dpto_cod', all.x = TRUE)
dist_points1 <-
merge(dist_points, datos_dist, by = "dpto_dist_cod", all.x = TRUE)
En esta etapa, los datos preparados y procesados anteriormente serán visualizados a través de mapas estáticos desarrollados a través del paquete Ggplot2.
#ELEMENTOS COMPOSICIÓN DE MAPAS
##Mapas base poligonos
mapa_base_dpto <- dpto_shape %>%
ggplot() + geom_sf(fill = "gray90",
alpha = 0.8,
colour = "Black")
mapa_base_dist <- dist_shape %>%
ggplot() + geom_sf(fill = "gray90",
alpha = 0.1,
colour = "Black")
##Mapas base poligonos para burbujas
mapa_base_dpto_burbujas <- dpto_shape %>%
ggplot() + geom_sf(fill = "gray75",
alpha = 0.8,
colour = "gray90")
mapa_base_dist_burbujas <- dist_shape %>%
ggplot() + geom_sf(fill = "gray75",
alpha = 0.8,
colour = "gray90")
#Breaks y labels para leyendas
activo_breaks <-
c(1, 25, 150, 500, 1000, 3000) # Breaks para la variable "activos"
cant_casos_breaks <- c(25, 150, 500, 1000, 3000)
cant_casos_labels <-
c("1 - 24", "25 - 149", "150 - 499", "500 - 999", "3000+")
#labels
activo_labels <-
c("1 - 24", "25 - 149", "150 - 499", "500 - 999", "1000 - 2999", "3000+")# Labels para la variable "activos"
leg_title_cant_casos = c("Total de confirmados")
leg_title_activos = c("Total de activos")
# Fuentes
titulo_dist <-
"Distribución distrital de casos de COVID-19 en Paraguay"
titullo_dpto <-
"Distribución departamental de casos de COVID-19 en Paraguay"
subtitulo <-
paste(
"Total confirmados:",
format(
sum(datos_dist$cant_casos, na.rm = TRUE),
big.mark = ".",
decimal.mark = ","
),
"Total activos:",
format(
sum(datos_dist$activo, na.rm = TRUE),
big.mark = ".",
decimal.mark = ","
)
)
fuentes <-
paste(
'Fuentes: Datos de https://www.mspbs.gov.py/reporte-covid19.html',
"| Datos actualizados al:",
strftime(max(datos_covid_py$fecha), format = "%d/%m/%Y"),
"\nContacto: Ing. Carlos Giménez: charlieswall@gmail.com / Dr. Pastor Pérez: peperez.estigarribia@pol.una.py"
)
bar_cant_casos_dpto <-
ggplotGrob(
datos_dptos %>% ggplot(aes(
x = cant_casos,
y = reorder(dpto_desc, cant_casos),
fill = cant_casos
)) +
scale_fill_fermenter(
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(datos_dptos$cant_casos, na.rm = TRUE))
) +
scale_x_continuous(breaks=c(0,2000, 4000))+
geom_bar(stat = "identity") +
theme(
panel.background = element_blank(),
panel.grid.major.x = element_line(colour = "gray70"),
plot.title = element_text(family = "serif", size=11, face = "bold", hjust = 0, color = "#4e4d47"),
plot.title.position = "plot",
legend.position = "none",
axis.title.x = element_text(size = 10, family = "serif", color = "#4e4d47"),
axis.text.y.left = element_text(size = 7,
hjust = 0,
color = "#4e4d47",
family = "serif"),
axis.title.y = element_blank()
) +
geom_text(aes(label=cant_casos), hjust= 1,color="Black", size=3, family = "serif")+
labs(x = "Casos confirmados", title = "Casos confirmados por departamento")
)
#Mapa de cantidad de casos confirmados acumulados sin activos por polígonos
es_cant_confirmados_dpto <-
mapa_base_dpto + geom_sf(
data = dpto_shape1,
aes(fill = cant_casos),
colour = "grey75"
) +
scale_fill_fermenter(
show.limits = TRUE,
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(dpto_shape1$cant_casos, na.rm = TRUE))
) +
geom_label_repel(
data = datos_dptos,
aes(x = lon_dpto, y = lat_dpto, label = cant_casos),
fontface = "bold",
size = 4,
alpha = 0.5,
segment.color = "black",
force = 0,
nudge_x = ifelse(
datos_dptos$dpto_cod == "0",-0.4,
ifelse(datos_dptos$dpto_cod == "11",-0.1, 0)
),
nudge_y = 0
) +
annotate("rect", xmin = -63, xmax =-59.7, ymin = -26.1, ymax = -25.3, alpha = .2) +
annotate("Text", x=-62.9, y=-25.7, label= "Obs: El análisis se realizó en base a \ncasos fuera de albergue (comunitarios)", size=5,hjust = 0, family = "serif", color = "#4e4d47") +
annotation_custom(
bar_cant_casos_dpto,
xmin = -53.7,
xmax = -50,
ymin = -28.2,
ymax = -24
) +
## Para usar los brewer colors se implementa fill_fermenter o fill_distiller
annotation_scale(location = "bl", width_hint = 0.4) +
annotation_north_arrow(
location = "tr",
which_north = "true",
pad_x = unit(0.2, "in"),
pad_y = unit(0.2, "in"),
style = north_arrow_fancy_orienteering
) +
labs(fill = "Total confirmados",
caption = fuentes,
title = titullo_dpto,
subtitle = subtitulo) +
guides(
fill = guide_bins(
title.position = 'top',
keywidth = unit(1.5, units = "cm"),
keyheight = unit(0.8, units = "cm"),
axis.linewidth = unit(0.4, units = "cm"),
order = 1,
show.limits = TRUE
)
) +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.background = element_blank(),
plot.background = element_blank(),
panel.grid.major = element_line(size = 0.5, linetype = "solid", colour = "gray80"),
plot.title = element_text(family = "serif",color = "#4e4d47", size = 20, face = "bold"),
plot.subtitle = element_text(family = "serif",color = "#4e4d47", size = 18),
plot.caption = element_text(
hjust = 0,
size = 10,
color = "#4e4d47",
family = "serif"
),
legend.title = element_text(
face = "bold",
color = "#4e4d47",
family = "serif",
hjust = 0,
size = 16
),
legend.position = "right",
legend.justification = c(0, 1),
legend.background = element_blank(),
legend.text = element_text(
color = "#4e4d47",
family = "serif",
size = 15
),
legend.key = element_blank(),
legend.direction = "vertical",
)
es_cant_confirmados_dpto
# Gráfico de barras para el mapa de casos confirmados por distrito
bar_dist_data_cant_casos <-
datos_dist %>% arrange(desc(datos_dist$cant_casos))# Se ordenan los datos en orden descendente de cantidad de casos
bar_dist_data_cant_casos <-
bar_dist_data_cant_casos[1:10, ]# Se extraen solo los 10 primeros registros correspondientes a los distritos con mayor cantidad de casos confirmados
# Se genera el grafico de barras
bar_cant_casos_dist <-
ggplotGrob(
bar_dist_data_cant_casos %>% ggplot(aes(
x = cant_casos,
y = reorder(dist_desc, cant_casos),
fill = cant_casos
)) +
scale_fill_fermenter(
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(datos_dist$cant_casos, na.rm = TRUE))
) +
scale_x_continuous(breaks=c(0,2000, 4000))+
geom_bar(stat = "identity") +
theme(
panel.background = element_blank(),
panel.grid.major.x = element_line(colour = "gray70"),
plot.title = element_text(family = "serif", size=11, face = "bold", hjust = 0, color = "#4e4d47"),
plot.title.position = "plot",
legend.position = "none",
axis.title.x = element_text(size = 10, family = "serif", color = "#4e4d47"),
axis.text.y.left = element_text(size = 7,
hjust = 0,
color = "#4e4d47",
family = "serif"),
axis.title.y = element_blank()
) +
geom_text(aes(label=cant_casos), hjust= 1,color="Black", size=3, family = "serif")+
labs(x = "Casos confirmados", title = "Casos confirmados por distrito")
)
#Mapa de cantidad de casos confirmados acumulados sin activos por polígonos
es_cant_confirmados_dist <-
mapa_base_dpto + geom_sf(
data = dist_shape1,
aes(fill = cant_casos),
colour = "grey75"
) +
scale_fill_fermenter(
show.limits = TRUE,
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(dist_shape1$cant_casos, na.rm = TRUE))
) +
annotate("rect", xmin = -63, xmax =-59.7, ymin = -26.1, ymax = -25.3, alpha = .2) +
annotate("Text", x=-62.9, y=-25.7, label= "Obs: El análisis se realizó en base a \ncasos fuera de albergue (comunitarios)", size=5,hjust = 0, family = "serif", color = "#4e4d47") +
annotation_custom(
bar_cant_casos_dist,
xmin = -53.7,
xmax = -50,
ymin = -28.2,
ymax = -24
) +
## Para usar los brewer colors se implementa fill_fermenter o fill_distiller
annotation_scale(location = "bl", width_hint = 0.4) +
annotation_north_arrow(
location = "tr",
which_north = "true",
pad_x = unit(0.2, "in"),
pad_y = unit(0.2, "in"),
style = north_arrow_fancy_orienteering
) +
labs(fill = "Total confirmados",
caption = fuentes,
title = titulo_dist,
subtitle = subtitulo) +
guides(
fill = guide_bins(
title.position = 'top',
keywidth = unit(1.5, units = "cm"),
keyheight = unit(0.8, units = "cm"),
axis.linewidth = unit(0.4, units = "cm"),
order = 1,
show.limits = TRUE
)
) +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.background = element_blank(),
plot.background = element_blank(),
panel.grid.major = element_line(size = 0.5, linetype = "solid", colour = "gray80"),
plot.title = element_text(family = "serif",color = "#4e4d47", size = 20, face = "bold"),
plot.subtitle = element_text(family = "serif",color = "#4e4d47", size = 18),
plot.caption = element_text(
hjust = 0,
size = 10,
color = "#4e4d47",
family = "serif"
),
legend.title = element_text(
face = "bold",
color = "#4e4d47",
family = "serif",
hjust = 0,
size = 16
),
legend.position = "right",
legend.justification = c(0, 1),
legend.background = element_blank(),
legend.text = element_text(
color = "#4e4d47",
family = "serif",
size = 15
),
legend.key = element_blank(),
legend.direction = "vertical",
)
es_cant_confirmados_dist
es_cant_casos_w_activo_dpto <-
mapa_base_dpto + geom_sf(data = dpto_shape1,
aes(fill = cant_casos),
colour = "grey75") +
scale_fill_fermenter(
show.limits = TRUE,
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(dpto_shape1$cant_casos, na.rm = TRUE))
) +
geom_point(
data = datos_dptos,
colour = "Red",
alpha = 0.5,
aes(x = lon_dpto,
y = lat_dpto,
size = activo)
) +
annotate(
"rect",
xmin = -63,
xmax = -59.7,
ymin = -26.1,
ymax = -25.3,
alpha = .2
) +
annotate(
"Text",
x = -62.9,
y = -25.7,
label = "Obs: El análisis se realizó en base a \ncasos fuera de albergue (comunitarios)",
size = 5,
hjust = 0,
family = "serif",
color = "#4e4d47"
) +
annotation_custom(
bar_cant_casos_dpto,
xmin = -53.7,
xmax = -50,
ymin = -28.2,
ymax = -24
) +
scale_size_continuous(
name = "Total activos",
range = c(2, 20),
limits = c(1, max(datos_dptos$activo, na.rm = TRUE)),
breaks = activo_breaks,
labels = activo_labels
) +
## Para usar los brewer colors se implementa fill_fermenter o fill_distiller
annotation_scale(location = "bl", width_hint = 0.4) +
annotation_north_arrow(
location = "tr",
which_north = "true",
pad_x = unit(0.2, "in"),
pad_y = unit(0.2, "in"),
style = north_arrow_fancy_orienteering
) +
labs(fill = "Total confirmados",
caption = fuentes,
title = titullo_dpto,
subtitle = subtitulo) +
guides(
fill = guide_bins(
title.position = 'top',
keywidth = unit(1.5, units = "cm"),
keyheight = unit(0.8, units = "cm"),
axis.linewidth = unit(0.4, units = "cm"),
order = 1,
show.limits = TRUE
)
) +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.background = element_blank(),
plot.background = element_blank(),
panel.grid.major = element_line(size = 0.5, linetype = "solid", colour = "gray80"),
plot.title = element_text(family = "serif",color = "#4e4d47", size = 20, face = "bold"),
plot.subtitle = element_text(family = "serif",color = "#4e4d47", size = 18),
plot.caption = element_text(
hjust = 0,
size = 10,
color = "#4e4d47",
family = "serif"
),
legend.title = element_text(
face = "bold",
color = "#4e4d47",
family = "serif",
hjust = 0,
size = 16
),
legend.position = "right",
legend.justification = c(0, 1),
legend.background = element_blank(),
legend.text = element_text(
color = "#4e4d47",
family = "serif",
size = 15
),
legend.key = element_blank(),
legend.direction = "vertical",
)
es_cant_casos_w_activo_dpto
es_cant_casos_w_activo_dist <-
mapa_base_dpto + geom_sf(
data = dist_shape1,
aes(fill = cant_casos),
colour = "grey75"
) +
scale_fill_fermenter(
show.limits = TRUE,
breaks = cant_casos_breaks,
na.value = "grey60",
palette = "YlOrRd",
direction = 1,
limits = c(1, max(dist_shape1$cant_casos, na.rm = TRUE))
) +
geom_point(
data = datos_dist,
colour = "Red",
alpha = 0.5,
aes(x = lon_dist,
y = lat_dist,
size = activo)
) +
annotate("rect", xmin = -63, xmax =-59.7, ymin = -26.1, ymax = -25.3, alpha = .2) +
annotate("Text", x=-62.9, y=-25.7, label= "Obs: El análisis se realizó en base a \ncasos fuera de albergue (comunitarios)", size=5,hjust = 0, family = "serif", color = "#4e4d47") +
annotation_custom(
bar_cant_casos_dist,
xmin = -53.7,
xmax = -50,
ymin = -28.2,
ymax = -24
) +
scale_size_continuous(
name = "Total activos",
range = c(2, 20),
limits = c(1, max(datos_dist$activo, na.rm = TRUE)),
breaks = activo_breaks,
labels = activo_labels
) +
## Para usar los brewer colors se implementa fill_fermenter o fill_distiller
annotation_scale(location = "bl", width_hint = 0.4) +
annotation_north_arrow(
location = "tr",
which_north = "true",
pad_x = unit(0.2, "in"),
pad_y = unit(0.2, "in"),
style = north_arrow_fancy_orienteering
) +
labs(fill = "Total confirmados",
caption = fuentes,
title = titulo_dist,
subtitle = subtitulo) +
guides(
fill = guide_bins(
title.position = 'top',
keywidth = unit(1.5, units = "cm"),
keyheight = unit(0.8, units = "cm"),
axis.linewidth = unit(0.4, units = "cm"),
order = 1,
show.limits = TRUE
)
) +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.background = element_blank(),
plot.background = element_blank(),
panel.grid.major = element_line(size = 0.5, linetype = "solid", colour = "gray80"),
plot.title = element_text(family = "serif",color = "#4e4d47", size = 20, face = "bold"),
plot.subtitle = element_text(family = "serif",color = "#4e4d47", size = 18),
plot.caption = element_text(
hjust = 0,
size = 10,
color = "#4e4d47",
family = "serif"
),
legend.title = element_text(
face = "bold",
color = "#4e4d47",
family = "serif",
hjust = 0,
size = 16
),
legend.position = "right",
legend.justification = c(0, 1),
legend.background = element_blank(),
legend.text = element_text(
color = "#4e4d47",
family = "serif",
size = 15
),
legend.key = element_blank(),
legend.direction = "vertical",
)
es_cant_casos_w_activo_dist
## Warning: Removed 13 rows containing missing values (geom_point).
Exportando con ggsave, como se puede ver, el primer parámetro corresponde a el nombre que tendrá el archivo, es importante especificar la extensión, el segundo parámetro corres ponde al objeto, y luego para este caso se especifican el ancho y altura en pulgadas, vale la pena mencionar que es posible especificar la unidad de medida y también la calidad en dpi.
ggsave( "es_cant_confirmados_dpto.png", es_cant_confirmados_dpto, width = 18, height = 11, dpi = 300)
ggsave( "es_cant_confirmados_dist.png", es_cant_confirmados_dist, width = 18, height = 11, dpi = 300)
ggsave( "es_cant_casos_w_activo_dpto.png", es_cant_casos_w_activo_dpto, width = 18, height = 11, dpi = 300)
ggsave( "es_cant_casos_w_activo_dist.png", es_cant_casos_w_activo_dist, width = 18, height = 11, dpi = 300)