6 Dados qualitativos: mapa corocromático nominal

6.1 Instalando e carregando pacotes do R

Inicie o RStudio, no Menu File, escolha New File e R Script.

Embora, na primeira vez de acesso não seja necessário limpar a memória, das outras vezes, ao iniciar o RStudio, é recomendável sempre limpá-la e definir o diretório de trabalho. Digite o seguinte comando:

#para limpar a memória
rm(list=ls(all=TRUE))

O que estiver depois do sinal # são anotações sobre o caminho percorrido que podem ajudar na memorização e não interferem no código. Você pode escrever o que quiser como anotação.

Para definir o diretório de trabalho, use a função setwd (de set working diretory, ou defina o diretório de trabalho, em português). Entre parênteses o caminho do diretório deve estar entre aspas e com a barra nesta direção /. Para verificar o diretório definido, use getwd():

#para definir o diretório de trabalho
getwd()

Além do R e RStudio, usaremos uma série de outros pacotes do R que podem ser instalados de uma vez, usando a função install.packages (instalar pacotes):

#para instalar os pacotes
install.packages(c(
  "devtools", "dplyr", "ggplot2", "ggtext", "ggthemes", "rgdal","rnaturalearth", "rnaturalearthdata", "sf", "sp","tidyr" 
))

Os pacotes rnaturalearth e rnaturalearthdata facilitam a elaboração de mapas em R com dados de feições naturais da Terra que se encontram em http://www.naturalearthdata.com/.

Vamos carregar alguns dos pacotes para a elaboração do mapa corocromático nominal, usando a função library para carregar as bibliotecas (pacotes instalados):

#para carregar os pacotes
library(ggplot2)
library(devtools)
library(rgdal)
library(sf)
library(sp)
library(rnaturalearth)
library(rnaturalearthdata)

6.2 O pacote geobr

O pacote geobr foi desenvolvido por pesquisadores do Instituto de Pesquisa Econômica Aplicada (IPEA), que é uma fundação pública federal vinculada ao Ministério da Economia do Brasil, para importar os dados do IBGE (PEREIRA & GONÇALVES, 2021). Este pacote está depositado no github do IPEA. Para facilitar a instalação de pacotes que não estão no repositório CRAN, pode-se usar o pacote devtools com a função install_github(). Se você seguiu os passos anteriores, o devtools já está instalado e carregado no RStudio.

#para instalar o pacote ‘geobr’
devtools::install_github("ipeaGIT/geobr", subdir = "r-package")

Você deve estar curioso para saber o que significa :: . O que vem antes de :: é o nome do pacote a ser utilizado e o que vem depois, a função a ser usada. É muito útil, pois muitas vezes nos esquecemos de carregar um determinado pacote com a função library() e, mesmo assim, o R identifica o pacote e executa a função. Além disso, como as funções podem ter o mesmo nome em vários pacotes, o R utilizará a função cujo pacote foi carregado por último, não necessariamente a que você deseja. Usando :: deixa claro o pacote cuja função você quer executar.

Vamos carregar o pacote que acabamos de instalar.

#para carregar o pacote
library(geobr)

O pacote geobr contém 27 conjuntos de dados do IBGE para importação. Este pacote evita que você tenha que ir ao site do IBGE para fazer o download individualmente de cada base cartográfica que pretende usar. Uma vez carregado no RStudio, você consegue fazer download dos dados segundo diferentes divisões territoriais. Para ter uma ideia do conteúdo do geobr, use a função list_geobr(), como a seguir:

#para listar o conteúdo do ‘geobr’
list_geobr()

Como iremos fazer um mapa dos biomas do Brasil, vamos criar um objeto chamado biomas. Este conjunto de dados inclui polígonos de todos os biomas presentes no território brasileiro e zona costeira. O conjunto de dados de 2019 está disponível na escala 1:250.000. Para isso, vamos atribuir o nome ‘biomas’ antes dos sinais <- e usar a função read_biomes do geobr, selecionando o ano dos dados de interesse - 2019. O argumento simplified é um argumento lógico (FALSO ou VERDADEIRO/FALSE or TRUE) que indica se a função deve retornar o conjunto de dados com a resolução original ou com os limites simplificados. A predefinição (default) é TRUE. Quando se deseja fazer análises espaciais com os dados, a versão com os limites simplificados é indicada. O argumento showProgress indica se deve apresentar a barra de progresso do download (TRUE) ou não (FALSE).

#para criar um objeto chamado ‘biomas’ a partir do conjunto de dados do IBGE
biomas <- read_biomes(year = 2019, simplified = TRUE, showProgress = FALSE)
## Using year 2019

Confira o tipo de objeto gerado:

#para ver o tipo de objeto
class(biomas)
## [1] "sf"         "data.frame"

Observe que a palavra ‘biomas’ aparece como um objeto no painel ‘Environment’ do RStudio. É um objeto do tipo ‘sf’ (espacial) e ‘data.frame’ porque tem uma tabela de dados alfa-numérica associada.

#para ver a tabela de dados de ‘biomas’
View(biomas)

Pode ser que demore um pouco para abrir. Você verá uma tabela que contém as seguintes colunas: name_biome, code_biome, year, geom. A tabela de dados possui uma coluna para os nomes dos biomas, outra para os códigos atribuídos a cada bioma, outra com o ano dos dados e a última com a geometria (coordenadas de cada vértice para todos os polígonos). Se você quiser ver apenas os nomes das variáveis (colunas), digite a função names().

#para ver os nomes das colunas do objeto ‘biomas’
names(biomas)
## [1] "name_biome" "code_biome" "year"       "geom"

Usando apenas o comando básico do R, conseguimos visualizar os dados espaciais. Vamos usar a função plot() para isso. O que temos é a Figura 6.1. Observamos que a partir da geometria (geom) foi elaborado um mapa para cada coluna da tabela de dados.

#para visualizar o objeto ‘biomas’
plot(biomas)
Mapa para cada coluna da tabela de dados

Figure 6.1: Mapa para cada coluna da tabela de dados

6.3 Projeção cartográfica

Quando elaboramos um mapa, é sempre interessante colocarmos a área mapeada em um contexto mais amplo. Isso pode ser feito no próprio mapa ou inserindo um mapa de referência dentro da área de plotagem. Vamos fazer a primeira opção.

Quando adicionamos mais de uma camada em um mapa, precisamos ficar atentos às projeções cartográficas das duas camadas. Vamos conferir a projeção da camada biomas.

head(biomas)
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.98304 ymin: -33.75115 xmax: -28.84785 ymax: 5.269581
## Geodetic CRS:  SIRGAS 2000
##       name_biome code_biome year                           geom
## 1       Amazônia          1 2019 MULTIPOLYGON (((-44.08515 -...
## 2       Caatinga          2 2019 MULTIPOLYGON (((-41.7408 -2...
## 3        Cerrado          3 2019 MULTIPOLYGON (((-43.39009 -...
## 4 Mata Atlântica          4 2019 MULTIPOLYGON (((-48.70814 -...
## 5          Pampa          5 2019 MULTIPOLYGON (((-52.82472 -...
## 6       Pantanal          6 2019 MULTIPOLYGON (((-57.75946 -...

Observamos que o sistema de coordenadas de referência CRS (coordinate reference system) é SIRGAS 2000.

Vamos criar uma camada do tipo sf (simple features) chamada mundo a partir do pacote rnaturalearth. A função ne_countries permite selecionar polígonos, pontos ou sf dos países do mundo em uma escala determinada ou pontos dos países muito pequenos. Para entender melhor, digite ne_countries na busca da aba Help do RStudio.

#para criar o objeto 'mundo'
mundo <- ne_countries(scale = "medium", returnclass = "sf")
#para ver o tipo de objetos
class(mundo)
## [1] "sf"         "data.frame"

mundo tem duas classes de objetos: um do tipo sf (simple feature) e outro do tipo data.frame (tabela de dados). Vamos ver também o CRS (coordinate reference system) de mundo.

sf::st_crs(mundo)

O sistema de coordenadas de mundo é +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0.

Vamos colocar biomas na mesma projeção. O pacote sf (simple features for R) (PEBESMA, 2018) permite a manipulação das bases de dados espaciais. Vamos usá-lo para alterar o CRS da camada biomas, usando a função st_transform.

#para alterar o CRS de 'biomas'
biomaswgs84<- st_transform(biomas, "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
#para verificar o CRS de 'biomaswgs84'
st_crs(biomaswgs84)

O embasamento teórico sobre as projeções cartográficas e sistemas de coordenadas geográficas é primordial para lidar com dados espaciais.

6.4 Iniciando com o ggplot2

ggplot2 é um pacote do R para produzir gráficos estatísticos ou dados (e mapas, claro!). Seu enorme potencial é descrito em diversos livros. Para aqueles que pretendem se aprofundar, uma ótima referência é Wickham et al. (2016). Todos os detalhes do pacote podem ser encontrados em https://ggplot2.tidyverse.org/reference/index.html.

Ao contrário da maioria dos outros pacotes gráficos, o ggplot2 possui uma gramática subjacente, com base na teoria da gramática dos gráficos (WILKINSON & WILLS, 2005; WICKHAM, 2010), que permite compor gráficos combinando componentes independentes.

Resumidamente, parte-se da ideia de que todo gráfico ou mapa é composto por um conjunto de dados (que fornecerá a informação a ser representada) e o arranjo (a descrição de como as variáveis dos dados são representadas por meio dos atributos estéticos). O arranjo tem cinco componentes:

layer - uma camada de elementos geométricos (geom), que representa o que se vê, como pontos, linhas, polígonos, etc. e a estatística que resume os dados;

scale - representa os valores do espaço dos dados no espaço estético. Este componente inclui o uso da cor, forma ou tamanho, além de desenhar a legenda e eixos;

coord - sistema de coordenadas que descreve como as coordenadas dos dados são representadas no plano do gráfico. Também fornece os eixos e linhas de grade;

facet - especifica como dividir e mostrar subconjuntos dos dados;

theme - controla os detalhes do gráfico/mapa, tais como o tamanho da fonte ou cor do fundo. Existe um tema padrão definido no ggplot2 que pode ser modificado.

O pacote ggplot2 só permite a elaboração de gráficos ou mapas estáticos. Para mapas interativos, outros pacotes podem ser usados, tais como o leaflet ou tmap.

Usando ggplot2 podemos especificar diferentes partes do gráfico e combiná-las usando o operador + (WICKHAM et al., 2016).

6.5 Biomas do Brasil

Vamos usar o ggplot2 para a elaboração do mapa de Biomas do Brasil. Agora que as camadas já estão com o mesmo CRS, vamos começar a adicioná-las por partes e configurar o mapa. No ggplot2, os mapas são construídos adicionando-se camada sobre camada, sendo a primeira delas dada pela função ggplot() (sem o número “2”). Primeiro vamos carregar a camada mundo. Digitamos a função ggplot(), definimos o banco de dados, no caso, mundo e acrescentamos o sinal +. sf é o acrônimo de simple features e desenha objetos geométricos diferentes dependendo do tipo de feição que existe nos dados, podendo ser pontos, linhas ou polígonos. Como vimos anteriormente, mundo tem um objeto do tipo sf e, por isso, vamos usar geom_sf para sua representação gráfica. Veja que a primeira linha chama a função ggplot . No final da primeira linha tem um sinal + indicando que outros elementos serão adicionados. Todas as linhas que serão adicionadas nesta função ficarão com recuo de 2 caracteres em relação à primeira linha. (Figura 6.2).

ggplot(data = mundo) +
  geom_sf()
Mapa base

Figure 6.2: Mapa base

Observe que não é necessário colocar data = quando for indicar que quer visualizar o objeto ‘mundo’. Esta indicação pode ser feita de forma direta ggplot(mundo).

Podemos alterar as cores do contorno dos países e do seu preenchimento adicionando as novas cores com os atributos ‘color’(ou ‘colour’) para o contorno e ‘fill’ para o preenchimento. Vamos usar tonalidades diferentes de cinza para estes atributos (Figura 6.3). Entenda melhor como funcionam as cores no R consultando https://r-charts.com/colors/.

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")
Mapa base em cinza claro

Figure 6.3: Mapa base em cinza claro

Agora vamos adicionar a segunda camada do mapa, a camada ‘biomaswgs84’. Para isso, precisamos indicar o nome da camada e qual o campo (variável) que definirá o preenchimento (neste caso, o campo name_biome), que contém os nomes de cada um dos biomas, um dado qualitativo nominal. O arranjo estético é dado por aes(), que descreve a propriedade visual da geometria (geom). Então na nova camada geom_sf precisamos indicar qual o banco de dados (biomaswgs84) e que queremos que o campo name_biome seja preenchido com cores (fill) (Figura 6.4).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, aes(fill = name_biome))
Mapa base em cinza claro e camada de biomas

Figure 6.4: Mapa base em cinza claro e camada de biomas

O resultado mostra que as duas camadas estão sobrepostas de forma correta e que as cores preenchidas correspondem a uma escala de cor default do ggplot2. Além disso, estamos vendo a representação do mundo todo. Como a nossa intenção é obter o mapa de biomas no território brasileiro, precisamos fazer um recorte indicando os limites geográficos que nos interessam. Assim, usando a função coord_sf (coordenadas de uma camada simple feature ) vamos indicar as coordenadas limites para o eixo x (longitude) e para o eixo y (latitude). Conferindo os limites da camada biomaswgs84 (xmin: -73.98304 ymin: -33.75115 xmax: -28.84785 ymax: 5.269581), vamos aumentar um pouco esta área para termos espaço na área dentro da moldura do mapa. A informação dos limites de uma camada pode ser extraída de sf::st_crs(biomaswgs84) ou head(biomaswgs84) (Figura 6.5).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)
Mapa base ajustada à camada de biomas

Figure 6.5: Mapa base ajustada à camada de biomas

A escala de cores não é apropriada para os dados que estão sendo representados. Podemos observar uma ordem na sequência das cores e a utilização de cores inadequadas para algumas feições como para os biomas Amazônia e Sistema Costeiro. Em mapas corocromáticos nominais, as cores devem permitir a diferenciação entre as feições. No R, existem diferentes formas de se referir aos nomes das cores e muitas escalas de cores. Com base na tabela em https://r-charts.com/colors/, você pode escolher os nomes das cores para cada bioma. Para tal, vamos usar a função scale_fill_manual e dizer qual cor a partir da ordem em que apareceram na legenda da figura anterior: Amazônia, Caatinga, Cerrado, Mata Atlântica, Pampa, Pantanal e Sistema Costeiro (Figura 6.6).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))
Mapa base e biomas com cores adequadas

Figure 6.6: Mapa base e biomas com cores adequadas

Agora que as cores foram ajustadas, vamos mudar o título que fica acima da legenda. Para isso, vamos usar a função labs (rótulo) dizendo que quer preencher com a palavra “Biomas”(Figura 6.7).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")
Título da legenda

Figure 6.7: Título da legenda

Nem todo mapa precisa de um título no próprio mapa. Ele pode estar na legenda da figura. Este detalhe depende do propósito do mapa. Aqui, vamos colocá-lo na área de fora, acima da área da moldura do mapa. O título do mapa é dado pela função ggtitle. O título vai entre aspas (Figura 6.8).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil")
Título do mapa

Figure 6.8: Título do mapa

Uma observação importante: caso quando você acrescente o título usando acentuação como em “corocromático”, apareça um erro, você precisará ajustar a língua para português usando a função Sys.setlocale(category = “LC_ALL”, locale = “pt_BR.UTF-8”).

Sys.setlocale(category = "LC_ALL", locale = "pt_BR.UTF-8")
## [1] "LC_COLLATE=pt_BR.UTF-8;LC_CTYPE=pt_BR.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_NUMERIC=C;LC_TIME=pt_BR.UTF-8"

Rodando o código novamente depois desta função deverá resolver o problema.

Agora vamos alterar a cor do fundo do mapa usando a função theme(), indicando que a cor do fundo deve ser “aliceblue” (Figura 6.9).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))
Mapa com fundo azul claro

Figure 6.9: Mapa com fundo azul claro

Nós podemos optar por deixar a legenda fora da moldura do mapa, como já está. No entanto, é importante saber como posicioná-la na parte de dentro. Para ajustar os elementos dentro da moldura, considere que o canto inferior esquerdo é a posição (0,0) e o canto superior direito, a posição (1,1). Por padrão, se não ajustarmos justification, a legenda ficará centralizada a partir da posição que definirmos na posição da legenda, o que cortará parte da mesma. Teste cada uma das quatro posiçoes a partir dos cantos, com a respectiva justification, alternando entre (0,0), (0,1), (1,0) e (1,1). Vamos ficar com a posição c(1, 0.2). A Figura 6.10 mostra como é a posição da legenda em (0,1).

ggplot(data = mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, mapping = aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(legend.position = c(0, 1), 
       legend.justification = c(1, 0.2), 
       legend.background = element_rect(colour = NA, fill = "white"))
Legenda na posição (0,1)

Figure 6.10: Legenda na posição (0,1)

Vamos precisar diminuir um pouco o tamanho da legenda. Uma legenda é composta por diversos elementos e todos podem ser ajustados: caixa da legenda, título, texto, espaçamento, cor do fundo, cor da moldura, entre outros. Para saber os ajustes que estão sendo usados use a função theme_get(). Segue a função para ajustes de alguns elementos.

theme(legend.key.size = unit(1, 'cm'), #muda o tamanho da caixa da legenda
        legend.key.height = unit(1, 'cm'), #muda a altura da caixa da legenda
        legend.key.width = unit(1, 'cm'), #muda a largura da caixa da legenda
        legend.title = element_text(size=14), #muda o tamanho da fonte do título
        legend.text = element_text(size=10)) #muda o tamanho da fonte do texto

Vamos reduzir o tamanho da fonte do título da legenda e do texto (Figura 6.11). As possibilidades de edição são inúmeras usando ggplot2. Sugiro consultar o site https://ggplot2.tidyverse.org/index.html e o livro online R Graphics Cookbook (CHANG, 2023), que cobrem todos os detalhes.

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(legend.position = c(1, 0), 
       legend.justification = c(1, 0), 
       legend.background = element_rect(colour = NA, fill = "white"),
       legend.title = element_text(size=8),
       legend.text = element_text(size=7))
Redução das fontes do título da legenda e texto

Figure 6.11: Redução das fontes do título da legenda e texto

O título pode ser colocado dentro da área do mapa, do lado direito. Vamos acrescentar esta informação logo abaixo da definição do título no código, usando theme(plot.title = element_text(hjust = 1, vjust = -8)) para que o alinhamento fique à direita (hjust = 1) e que fique dentro da área (vjust = -8) (Figura 6.12).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data=biomaswgs84, aes(fill = name_biome)) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(plot.title = element_text(hjust = 1, vjust = -8))+
  theme(legend.position = c(1, 0), 
       legend.justification = c(1, 0), 
       legend.background = element_rect(colour = NA, fill = "white"),
       legend.title = element_text(size=9),
       legend.text = element_text(size=8))
Alinhamento do título

Figure 6.12: Alinhamento do título

Precisamos adicionar um elemento muito importante: a escala gráfica! A função ggspatial::annotation_scale(location = “br”, width_hint = 0.4, line_width = 0.5, height = unit(0.1,“cm”)) indica que a localização da escala gráfica será “br”, ou seja, bottom right (inferior direito). width_hint é a largura total da barra da escala. A espessura da linha da barra da escala é dada por line_width e height, a altura. Vamos aproveitar também para colocar uma linha de contorno na moldura do mapa. Essa linha é a panel.border. As linhas do Equador e do Trópico de Capricórnio podem ser adicionadas com a função geo_hline() ajustando os valores para 0 (Equador) e -23.27 para o Trópico. O tipo da linha será pontilhado “dashed”. Também podemos deixar sem linhas dos contornos dos biomas usando colour=NA na camada “biomaswgs84” (Figura 6.13).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, aes(fill = name_biome), colour=NA) +
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  geom_hline(yintercept = 0, linetype = "dashed")+
  geom_hline(yintercept =-23.27, linetype = "dashed")+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(plot.title = element_text(hjust = 1, vjust = -8))+
  theme(legend.position = c(1, 0.2), 
       legend.justification = c(1, 0.2), 
       legend.background = element_rect(colour = NA, fill = "white"),
       legend.title = element_text(size=9),
       legend.text = element_text(size=8),
       panel.border = element_rect(color = "black",size = .1,fill = NA))+
  ggspatial::annotation_scale(location = "br", width_hint = 0.3, line_width = 0.5, height = unit(0.1,"cm"))
## Scale on map varies by more than 10%, scale bar may be inaccurate
Escala gráfica, Equador e Trópico de Capricórnio

Figure 6.13: Escala gráfica, Equador e Trópico de Capricórnio

Observe que quando inserimos as linhas do Equador e do Trópico de Capricórnio, apareceu o título no eixo y como “yintercept”. Para remover esta informação, basta indicar que o título do eixo não deve ter preenchimento axis.title.y = element_blank()). Embora o mapa de biomas pareça satisfatório, não temos referências internas da localização dos biomas. Seria interessante adicionar a camada dos estados (Unidades da Federação = UF) sem preenchimento e com o contorno em cinza médio (grey50). Para isso, primeiro vamos criar uma camada “sf” usando uma função do geobr, que é a “read_state”.

uf <- read_state(code_state = "all", year = 2010, simplified = TRUE, showProgress = FALSE)
## Using year 2010

Em seguida, vamos transformar a projeção da camada “uf” para que fique em WGS84.

ufwgs84 <- st_transform(uf, "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")

Agora adicionamos a camada ufwgs84 logo abaixo da linha de código da camada biomaswgs84. O atributo alpha = 0 indica que não deve haver preenchimento da camada, ou seja, ela deverá ficar transparente e o contorno deverá ser “grey50” (Figura 6.14).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, aes(fill = name_biome), colour=NA)+
  geom_sf(data = ufwgs84, colour = "grey50", alpha = 0)+
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  geom_hline(yintercept = 0, linetype = "dashed")+
  geom_hline(yintercept =-23.27, linetype = "dashed")+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas")+
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(plot.title = element_text(hjust = 1, vjust = -8))+
  theme(legend.position = c(1, 0.2), 
       legend.justification = c(1, 0.2), 
       legend.background = element_rect(colour = NA, fill = "white"),
       legend.title = element_text(size=9),
       legend.text = element_text(size=8),
       panel.border = element_rect(color = "black",size = .1,fill = NA),
       axis.title.y = element_blank())+
  ggspatial::annotation_scale(location = "br", width_hint = 0.4, line_width = 0.5, height = unit(0.1,"cm"))
## Scale on map varies by more than 10%, scale bar may be inaccurate
Adicionando os limites das Unidades da Federação

Figure 6.14: Adicionando os limites das Unidades da Federação

Por último, vamos adicionar a fonte dos dados. Esta informação entra como “caption” na função labs e poderá entrar nos parênteses já existentes para labs (Figura 6.15).

ggplot(mundo) + 
  geom_sf(color = "grey80", fill = "grey90")+
  geom_sf(data = biomaswgs84, aes(fill = name_biome), colour=NA)+
  geom_sf(data = ufwgs84, colour = "grey50", alpha = 0)+
  coord_sf(xlim = c(-77, -19), ylim = c(-36, 10), expand = FALSE)+
  geom_hline(yintercept = 0, linetype = "dashed")+
  geom_hline(yintercept =-23.27, linetype = "dashed")+
  scale_fill_manual(values=c("forestgreen", "lightgoldenrodyellow", "orange1","green3","indianred","mediumorchid3","skyblue1"))+
  labs(fill = "Biomas",
       caption = "Fonte: IBGE (2019) \n Elaborado por: @Ligiaviz") +
  ggtitle("Mapa corocromático nominal: Biomas do Brasil") +
  theme(panel.background = element_rect(fill = "aliceblue"))+
  theme(plot.title = element_text(size = 10, hjust = 1, vjust = -8))+
  theme(legend.position = c(1, 0.2), 
       legend.justification = c(1, 0.2), 
       legend.background = element_rect(colour = NA, fill = "white"),
       legend.title = element_text(size=8),
       legend.text = element_text(size=7),
       plot.caption = element_text(size = 7),
       panel.border = element_rect(color = "black",size = .1,fill = NA),
       axis.title.y = element_blank())+
  ggspatial::annotation_scale(location = "br", width_hint = 0.4, line_width = 0.5, height = unit(0.1,"cm"))
## Scale on map varies by more than 10%, scale bar may be inaccurate
Mapa final com fonte de dados

Figure 6.15: Mapa final com fonte de dados

Pronto! Nosso primeiro mapa em R está finalizado! E nem doeu… Você pode salvar o arquivo no formato png. Ele estará no seu diretório de trabalho.

ggsave("biomas.png", width = 8, height = 8, dpi = 300)

Referências citadas

CHANG, W. (2023) R Graphics Cookbook: Practical Recipes for Visualizing Data. 2nd Edition. https://r-graphics.org/index.html

PEBESMA, E. (2018). Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal 10:1, 439-446. https://journal.r-project.org/archive/2018/RJ-2018-009/index.html

PEREIRA, R.H.M.; GONÇALVES, C.N. (2021) geobr: Loads Shapefiles of Official Spatial Data Sets of Brazil. GitHub repository - https://github.com/ipeaGIT/geobr.

WICKHAM, H. (2010) A Layered Grammar of Graphics. Journal of Computational and Graphical Statistics, 19(1).

WICKHAM, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. ISBN 978-3-319-24277-4, https://ggplot2.tidyverse.org.

WILKINSON, L., WILLS, G. (2005) The Grammar of Graphics. 2nd Edition. New York: Springer. 690p.