Gráficos com dimensão espacial e temporal
O post de hoje é sobre visualização de dados com dimensão espacial e temporal. Basicamente são gráficos que têm uma representação geográfica associada a informações que variam no tempo. Este tipo de análise é comum no meu dia a dia e por isso resolvi deixar 3 alternativas registradas aqui. O contexto que iremos abordar está relacionado ao banco de dados de focos de incêndios registrados pelo INPE no Programa Queimadas Monitoramento por Satélites. O site é bem interessante e apresenta algumas estatísticas úteis sobre as queimadas na América do Sul e Brasil. Iremos trabalhar com a tabela que resume os focos de incêndios por ano e Estado brasileiro.
if (!require("pacman")) install.packages("pacman")
pacman::p_load(readr, dplyr, sf, ggplot2, ggthemes, geofacet, scales)
pacman::p_load_gh("italocegatta/brmap")
pacman::p_load_gh("thomasp85/gganimate")
O primeiro passo foi copiar os dados da página e organizá-los no formato tidy. Poderíamos fazer uma análise exploratória dos dados, mas quero manter o foco em algo bem pontual: como mostrar os dados brutos de uma só vez? Ou seja, considerando a dimensão de tempo (ano), geografia (localização do estado) e variável resposta (focos) na mesma janela gráfica, de que forma poderíamos apresentar os dados?
focos <- read_csv2("https://raw.githubusercontent.com/italocegatta/italocegatta.github.io_source/master/content/dados/base_incendios.csv")
focos
## # A tibble: 162 x 3
## sigla ano focos
## <chr> <dbl> <dbl>
## 1 AC 2011 13
## 2 AL 2011 127
## 3 AM 2011 159
## 4 AP 2011 5
## 5 BA 2011 883
## 6 CE 2011 44
## 7 DF 2011 8
## 8 ES 2011 55
## 9 GO 2011 492
## 10 MA 2011 656
## # ... with 152 more rows
Vamos agora adicionar a referência espacial aos dados utilizando os polígonos do pacote brmap.
estados_focos <- focos %>%
left_join(brmap_estado_simples, by = c("sigla" = "estado_sigla")) %>%
st_as_sf()
estados_focos
## Simple feature collection with 162 features and 6 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -73.99045 ymin: -33.75077 xmax: -34.79288 ymax: 5.271841
## epsg (SRID): 4674
## proj4string: +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## # A tibble: 162 x 7
## sigla ano focos estado_cod regiao_cod estado_nome
## <chr> <dbl> <dbl> <int> <int> <chr>
## 1 AC 2011 13 12 1 Acre
## 2 AL 2011 127 27 2 Alagoas
## 3 AM 2011 159 13 1 Amazonas
## 4 AP 2011 5 16 1 Amapá
## 5 BA 2011 883 29 2 Bahia
## 6 CE 2011 44 23 2 Ceará
## 7 DF 2011 8 53 5 Distrito F~
## 8 ES 2011 55 32 3 Espírito S~
## 9 GO 2011 492 52 5 Goiás
## 10 MA 2011 656 21 2 Maranhão
## # ... with 152 more rows, and 1 more variable: geometry <POLYGON [°]>
A primeira abordagem vai utilizar o pacote geofacet. Ele permite criarmos um grid de referência para orientar a função facet_wrap
de ggplot2
. O pacote já vem carregado com um grid do Brasil, o br_grid1
, mas você pode construir e utilizar seu próprio grid. Eu, particularmente, gosto desta representação pois é extremamente flexível e comporta uma infinidade de gráficos (linhas, pontos, barras…) e dimensões (color, shape, size…). O gráfico 1 está bem simples mas cumpre seu papel em facilitar a percepção da variação anual e dar uma noção da região espacial do Estado no Brasil.
ggplot(estados_focos, aes(ano, focos)) +
geom_line() +
facet_geo(~estado_nome, grid = br_states_grid1) +
labs(
x = "Ano",
y = "Nº de focos de incêndios"
) +
scale_x_continuous(breaks = 2011:2017, labels = 11:17) +
scale_y_continuous(label = unit_format(unit = "k", scale = 1e-3)) +
theme_bw()
A segunda abordagem é relativamente simples e intuitiva. Construiremos um mapa temático utilizando o Nº de focos como escala de cor, mas organizado em um painel que tem como base o ano de registro. O gráfico 2 apela para a dimensão de cor e instantaneamente nos informa o estado mais crítico. Especificamente para esta análise ele este tipo de gráfico é muito apropriado.
ggplot(estados_focos) +
geom_sf(aes(fill = focos), color = NA) +
facet_wrap(~ano) +
labs(fill = "Nº de focos de incêndios") +
scale_fill_viridis_c(label = unit_format(unit = "k", scale = 1e-3)) +
coord_sf(datum = NA) +
theme_bw(16) +
theme(legend.position = "bottom", legend.justification = "right") +
guides(fill = guide_colorbar(barwidth = 15, title.position = "top"))
E por fim, nossa terceira tentativa vai unificar os painéis do gráfico 2 em um gif animado. A limitação do gráfico é que muitas vezes nossos gráficos vão para documentos estáticos como PDF e Word, inviabilizando o gif.
ggplot(estados_focos) +
geom_sf(aes(fill = focos), color = NA) +
labs(
title = "Ano: {current_frame}",
fill = "Nº de focos de incêndios"
) +
scale_fill_viridis_c(label = unit_format(unit = "k", scale = 1e-3)) +
theme_bw(18) +
theme(legend.position = "bottom", legend.justification = "right") +
guides(fill = guide_colorbar(barwidth = 15, title.position = "top")) +
transition_manual(ano)
Caso tenha alguma dúvida ou sugestão sobre o post, fique à vontade para fazer um comentário ou me contatar por E-mail.
sessioninfo::session_info(c("readr", "dplyr", "ggplot2", "sf", "geofacet", "gganimate", "scales", "brmap"))
## - Session info ----------------------------------------------------------
## setting value
## version R version 3.5.3 (2019-03-11)
## os Windows 10 x64
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate Portuguese_Brazil.1252
## ctype Portuguese_Brazil.1252
## tz America/Sao_Paulo
## date 2019-08-25
##
## - Packages --------------------------------------------------------------
## package * version date lib source
## askpass 1.1 2019-01-13 [1] CRAN (R 3.5.2)
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.5.3)
## backports 1.1.4 2019-04-10 [1] CRAN (R 3.5.3)
## BH 1.69.0-1 2019-01-07 [1] CRAN (R 3.5.2)
## brmap * 0.1.0 2019-03-04 [1] local
## class 7.3-15 2019-01-01 [2] CRAN (R 3.5.3)
## classInt 0.4-1 2019-08-06 [1] CRAN (R 3.5.3)
## cli 1.1.0 2019-03-19 [1] CRAN (R 3.5.3)
## clipr 0.7.0 2019-07-23 [1] CRAN (R 3.5.3)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.5.3)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.5.1)
## curl 4.0 2019-07-22 [1] CRAN (R 3.5.3)
## DBI 1.0.0 2018-05-02 [1] CRAN (R 3.5.1)
## digest 0.6.20 2019-07-04 [1] CRAN (R 3.5.3)
## dplyr * 0.8.3 2019-07-04 [1] CRAN (R 3.5.3)
## e1071 1.7-2 2019-06-05 [1] CRAN (R 3.5.3)
## ellipsis 0.2.0.1 2019-07-02 [1] CRAN (R 3.5.3)
## fansi 0.4.0 2018-10-05 [1] CRAN (R 3.5.1)
## farver 1.1.0 2018-11-20 [1] CRAN (R 3.5.1)
## geofacet * 0.1.10 2019-03-13 [1] CRAN (R 3.5.3)
## geogrid 0.1.1 2018-12-11 [1] CRAN (R 3.5.2)
## gganimate * 1.0.3 2019-04-02 [1] CRAN (R 3.5.3)
## ggplot2 * 3.2.1 2019-08-10 [1] CRAN (R 3.5.3)
## ggrepel 0.8.1 2019-05-07 [1] CRAN (R 3.5.3)
## glue 1.3.1 2019-03-12 [1] CRAN (R 3.5.3)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 3.5.1)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 3.5.3)
## hms 0.5.0 2019-07-09 [1] CRAN (R 3.5.3)
## httr 1.4.1 2019-08-05 [1] CRAN (R 3.5.3)
## imguR 1.0.3 2016-03-29 [1] CRAN (R 3.5.1)
## jpeg 0.1-8 2014-01-23 [1] CRAN (R 3.5.0)
## jsonlite 1.6 2018-12-07 [1] CRAN (R 3.5.2)
## KernSmooth 2.23-15 2015-06-29 [2] CRAN (R 3.5.3)
## labeling 0.3 2014-08-23 [1] CRAN (R 3.5.0)
## lattice 0.20-38 2018-11-04 [2] CRAN (R 3.5.3)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 3.5.3)
## magrittr 1.5 2014-11-22 [1] CRAN (R 3.5.1)
## MASS 7.3-51.1 2018-11-01 [2] CRAN (R 3.5.3)
## Matrix 1.2-17 2019-03-22 [1] CRAN (R 3.5.3)
## mgcv 1.8-28 2019-03-21 [1] CRAN (R 3.5.3)
## mime 0.7 2019-06-11 [1] CRAN (R 3.5.3)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 3.5.1)
## nlme 3.1-137 2018-04-07 [2] CRAN (R 3.5.3)
## openssl 1.4.1 2019-07-18 [1] CRAN (R 3.5.3)
## pillar 1.4.2 2019-06-29 [1] CRAN (R 3.5.3)
## pkgconfig 2.0.2 2018-08-16 [1] CRAN (R 3.5.1)
## plogr 0.2.0 2018-03-25 [1] CRAN (R 3.5.1)
## plyr 1.8.4 2016-06-08 [1] CRAN (R 3.5.1)
## png 0.1-7 2013-12-03 [1] CRAN (R 3.5.0)
## prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.5.1)
## progress 1.2.2 2019-05-16 [1] CRAN (R 3.5.3)
## purrr 0.3.2 2019-03-15 [1] CRAN (R 3.5.3)
## R6 2.4.0 2019-02-14 [1] CRAN (R 3.5.2)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 3.5.0)
## Rcpp 1.0.2 2019-07-25 [1] CRAN (R 3.5.3)
## RcppArmadillo 0.9.600.4.0 2019-07-15 [1] CRAN (R 3.5.3)
## readr * 1.3.1 2018-12-21 [1] CRAN (R 3.5.2)
## reshape2 1.4.3 2017-12-11 [1] CRAN (R 3.5.1)
## rgeos 0.5-1 2019-08-05 [1] CRAN (R 3.5.3)
## rlang 0.4.0 2019-06-25 [1] CRAN (R 3.5.3)
## rnaturalearth 0.1.0 2017-03-21 [1] CRAN (R 3.5.1)
## scales * 1.0.0 2018-08-09 [1] CRAN (R 3.5.1)
## sf * 0.7-7 2019-07-24 [1] CRAN (R 3.5.3)
## sp 1.3-1 2018-06-05 [1] CRAN (R 3.5.1)
## stringi 1.4.3 2019-03-12 [1] CRAN (R 3.5.3)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 3.5.2)
## sys 3.2 2019-04-23 [1] CRAN (R 3.5.3)
## tibble 2.1.3 2019-06-06 [1] CRAN (R 3.5.3)
## tidyselect 0.2.5 2018-10-11 [1] CRAN (R 3.5.1)
## tweenr 1.0.1 2018-12-14 [1] CRAN (R 3.5.2)
## units 0.6-3 2019-05-03 [1] CRAN (R 3.5.3)
## utf8 1.1.4 2018-05-24 [1] CRAN (R 3.5.1)
## vctrs 0.2.0 2019-07-05 [1] CRAN (R 3.5.3)
## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 3.5.1)
## withr 2.1.2 2018-03-15 [1] CRAN (R 3.5.1)
## zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.5.2)
##
## [1] C:/Users/Italo/Documents/R/win-library/3.5
## [2] C:/Program Files/R/R-3.5.3/library