Hacer gráfica en R de precipitación a partir de archivos raster por departamento


En este tutorial explicare brevemente como realizar un gráfico tipo ojiva, en el cual se presente en el eje x los meses del año & en el eje y la precipitación acumulada para cada mes, a tres distintos departamentos de Colombia, estos son: Antioquía, Cundinamarca y Valle del Cauca. Los datos de entrada fueron tomados de la base de datos Worldclim (Hijmans et al., 2005) y extraídos para Colombia a partir del shape de límite departamental del SIGOT.
Los datos utilizados en este tutorial están disponibles en este enlace, y se describen a continuación:
1) 12 raster de precipitación para todo Colombia a resolución de 30 arcos de segundo (aproximadamente 1 km2)
2) Shapefile de los 32 departamentos de Colombia.
A continuación se describen los pasos, asumiendo que ya se tiene instalado R y RStudio en su computador.
1. Instalamos las siguientes librerías (importante tener conexión a Internet)
install.packages("raster")
install.packages("rgdal")
install.packages("ggplot2")
install.packages("dplyr")
install.packages("reshape2")

require("raster")
require("rgdal")
require("ggplot2")
require("dplyr")
require("reshape2")
2.  Llamamos nuestros datos en RStudio

myproj <- CRS("+proj=longlat +datum=WGS84") #proyección a utilizar
path <- "E:/Blogs/_blogger/_graphClimate" #dirección donde está el directorio raíz de los datos
col_shp <- shapefile(paste0(path, "/_shp/LimiteDptal.shp")) # limite departamental
files <- list.files(paste0(path, "/_climate/_colombia/_asc"), full.names = T, pattern = ".asc$") #archivos raster
 3. Escogemos en nuevos objetos los departamentos de interés

valleCauca_shp <- col_shp[col_shp$NOMBRE_DPT %in% "VALLE DEL CAUCA",]
cundinamarca_shp <- col_shp[col_shp$NOMBRE_DPT %in% "CUNDINAMARCA",]
antioquia_shp <- col_shp[col_shp$NOMBRE_DPT %in% "ANTIOQUIA",]
4. Archivos raster

files_prec <- grep("prec", files, value = T) %>%
mixedsort() #seleccion de precipitación y ordenar datos
layers_prec <- lapply(files_prec, raster) #conversión de objetos a raster
5. Corte de archivos raster por departamento, se crean listas vacías donde se guardaran los raster para cada departamento.
prec_antioquia    <- list() #creación de lista vacía
prec_cundinamarca <- list() #creación de lista vacia
prec_valle <- list() #creación de lista vacia

for(i in 1:length(layers_prec)){

prec_antioquia[[i]] <- crop(layers_prec[[i]], antioquia_shp)
prec_antioquia[[i]] <- mask(prec_antioquia[[i]], antioquia_shp)

prec_cundinamarca[[i]] <- crop(layers_prec[[i]], cundinamarca_shp)
prec_cundinamarca[[i]] <- mask(prec_cundinamarca[[i]], cundinamarca_shp)

prec_valle[[i]] <- crop(layers_prec[[i]], valleCauca_shp)
prec_valle[[i]] <- mask(prec_valle[[i]], valleCauca_shp)

}
6. Calculo de promedios de precipitación para cada mes en nuestros departamentos objeto de estudio. Se crean listas vacías donde se guardaran los datos de promedios para cada raster por departamento.

prec_mean_antioquia <- list(); prec_mean_cund <- list(); prec_mean_valle <- list()
prec_df_antioquia <- NA; prec_df_cund <- NA; prec_df_valle <- NA

for(i in 1:length(prec_antioquia)){

prec_mean_antioquia[[i]] <- mean(prec_antioquia[[i]][], na.rm = T)
prec_df_antioquia <- t(as.data.frame((rbind(prec_mean_antioquia))))

prec_mean_cund[[i]] <- mean(prec_cundinamarca[[i]][], na.rm = T)
prec_df_cund <- t(as.data.frame((rbind(prec_mean_cund))))

prec_mean_valle[[i]]<- mean(prec_valle[[i]][], na.rm = T)
prec_df_valle <- t(as.data.frame((rbind(prec_mean_valle))))

}
7. Orden de datos para ggplot

df_prec <- data.frame(prec_df_antioquia, prec_df_cund, prec_df_valle)
df_prec %
mutate(Month_numeric = 1:nrow(df_prec)) %>%
mutate(prec_mean_antioquia = as.numeric(prec_mean_antioquia),
      prec_mean_cund = as.numeric(prec_mean_cund),
      prec_mean_valle  = as.numeric(prec_mean_valle))

prec_df_rename <- rename(df_prec, Antioquia = prec_mean_antioquia,
Cundinamarca = prec_mean_cund, Valle = prec_mean_valle)

prec_df_melt <- melt(prec_df_rename, id = 'Month_numeric')
prec_df_melt <- rename(prec_df_melt, Departamento = variable)
8. Creación de gráfico base

gg  <- ggplot(prec_df_melt, aes(Month_numeric, value,  fill = Departamento, colour = Departamento))+ geom_line() + xlab("Mes") + ylab("Precipitación (mm)") + ggtitle("Precipitación para cada mes") +
scale_x_continuous(expand = c(0,0), breaks = c(1:12), labels = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
theme(legend.position = "bottom")
9. Creación de gráfico base

gg <- gg + scale_colour_manual(labels = c("Antioquia", "Cundinamarca", "Valle del Cauca"), values = c("red", "green", "blue"))

10. Guardado de gráfico en buena resolución

ggsave(plot = gg, paste0(path, "/_png/precYear_dptos.png"), width = 9, height = 8, units = "in")
gg
El gráfico debe quedar así:

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s