En este notebook vamos a crear una visualización de calendario para mostrar los días en los que ocurren accidentes en un centro de trabajo, gráfico conocido como “calendar heatmap”
Para hacer la visualización modificaremos la función publicada en este artículo: https://www.r-bloggers.com/ggplot2-time-series-heatmaps-revisited-in-the-tidyverse/
Como librerías utilizaremos el paquete tidyverse (que incluye dplyr y ggplot2) y lubridate.
library(tidyverse)
library(lubridate)
library(readr)
df <- read_delim("AT1016.csv", ";", escape_double = FALSE,
col_types = cols(ACCIDENTES = col_integer(),
FECHA = col_date(format = "%Y-%m-%d")),
trim_ws = TRUE)
# La función la modificamos para mostrar los días y meses en español, y para que carge directamente los datos con dos columnas con la fecha y el valor a mostrar.
calendario <- function(x){
dftemp <- x
dftemp %>%
setNames(c("Fecha","Valor")) %>%
dplyr::mutate(
Year=lubridate::year(Fecha),
Month=lubridate::month(Fecha),
MonthTag=factor(Month,levels=as.character(1:12),
labels=c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"),ordered=TRUE),
Wday=lubridate::wday(Fecha,week_start=1),
WdayTag=factor(Wday,levels=rev(1:7),labels=rev(c("Lun","Mar","Mie","Jue","Vie","Sab","Dom")),ordered=TRUE),
Week=as.numeric(format(Fecha,"%W"))
) %>%
dplyr::group_by(Year,Month) %>%
dplyr::mutate(Wmonth=1+Week-min(Week)) %>%
dplyr::ungroup() %>%
ggplot(aes(x=Wmonth, y=WdayTag, fill = Valor)) +
geom_tile(colour = "white") +
facet_grid(Year~MonthTag) +
scale_fill_gradient(low="blue", high="red") +
labs(x="Semana", y=NULL,fill=NULL)
}
calendario (df)