Como criar um mapa de calor no R para mostrar dados de qualidade ambiental?

Confira nosso curso online de QGIS

Quando montamos um estudo ambiental, precisamos resumir várias informações. Uma forma de resumir dados de qualidade ambiental é por meio de gráficos, como os mapas de calor.

Quando trabalhamos em estudos ambientais de empreendimentos com grande potencial poluidor, normalmente, além do Estudo de Impacto Ambiental (EIA), também é solicitado o Relatório de Impacto Ambiental (RIMA). Neste segundo, são apresentadas as principais informações do EIA, de forma mais clara e de fácil entendimento para a população de modo geral.

Nos EIA/RIMA, o capítulo sobre qualidade da água superficial costuma ter várias análises de diferentes pontos amostrados. Dependendo a situação, o capítulo pode ser bem extenso.

Como uma das funções do RIMA é ser uma versão resumida do EIA, como apresentar esses dados?

Uma forma é por meio de mapas de calor, os quais são possíveis utilizando R e a biblioteca ggplot2.

Preparando os dados de entrada

Inicialmente, você deverá ter seus dados de qualidade ambiental salvos em uma planilha do Excel. Eles devem estar organizados da seguinte forma:

  • A primeira linha deverá conter os nomes dos parâmetros, sem espaços (ex. OD_mg_l, Solidos_Totais);
  • Cada linha representará um ponto amostrado;
  • Cada coluna representará um parâmetro analisado.

Após organizar sua planilha, você deverá salvá-la no formato CSV. O Excel irá mostrar alguns avisos por causa da perda de formatação e funções, mas não se preocupe, neste caso, você poderá ignorar tais mensagens e salvar o arquivo em CSV.

O arquivo que usaremos pode ser baixado aqui.

Agora que temos os dados em mãos, vamos começar a programar com o R.

Carregando a planilha no R

Vamos começar carregando as bibliotecas necessárias para rodar nosso código (isto é, ggplot2 e o reshape2). Além disso, vamos carregar nossa planilha.

library(ggplot2)
library(reshape2)

setwd("C:/Users/ferna/Desktop/TEMP/")
dados <- read.csv("aguaSuperficial.csv", header = TRUE, sep = ";", dec = ",")

Com isso, já temos nossos dados para trabalhar. Veja que temos 7 pontos amostrados e 10 parâmetros analisados.

Normalizando os dados

Para melhor representar nossos dados no mapa de calor, é interessante que normalizemos os dados, visto que temos parâmetros que variam desde valores muito pequenos (como o Ferro e Manganês) à valores muito altos (como Condutividade Elétrica e Sólidos Totais).

Para realizarmos esse procedimento, vamos criar uma função que irá pegar o valor fornecido (x), irá subtrair o menor valor do conjunto e irá dividir pela amplitude dos valores (máximo menos o mínimo).

normalizar <- function(x){
  round((x-min(x))/(max(x)-min(x)), 4)
}

A aplicação dessa função ao longo do nosso conjunto de dados será realizada por meio da função apply(). Esta função recebe os dados que são usados, o índice 2 (neste caso, para aplicar a função em cada coluna) e a função a ser aplicada.

dadosNORM <- apply(dados[,2:11], 2, normalizar)
dadosNORM <- as.data.frame(dadosNORM)
pontos <- as.character(dados[,1])
dadosNORM <- data.frame(pontos, dadosNORM)

names(dadosNORM) <- c("Pontos Amostrados", "Ferro", "Manganês", 
                      "Acidez", "Condutividade", "SDT", "ST", 
                      "Sulfato", "Turbidez", "pH", "OD")

Agora que organizamos nossos dados de entrada, vamos começar a montar nosso mapa de calor.

Construindo mapa de calor no R

Para montar o mapa de calor, precisaremos converter nossa planilha de dados que esta no formato ‘Wide’ para o formato ‘Long’. Esse tipo de formato esta relacionado como a planilha é montada.

Comumente, as planilhas de dados ambientais são criadas onde cada linha representa um ponto amostrado e cada coluna um parâmetro (formato ‘Wide’). Porém, algumas aplicações requerem o formato ‘Long’, onde cada linha representa uma amostra e seu respectivo parâmetro (indicado pela coluna parâmetro).

Diferença entre formato Wide e Long (Fonte: swcarpentry.github.io).

Para realizar essa conversão, usaremos a função melt do pacote reshape2.

mapaCalor <- melt(dadosNORM, id.vars = c("Pontos Amostrados"))

Agora podemos começar a construir nosso mapa de calor.

Criando um mapa de calor com ggplot2

O código que usamos apresenta várias funções do ggplot2 e comenterei sobre elas nos tópicos a seguir:

  • ggplot(): Função principal para criar o gráfico na biblioteca ggplot2;
  • geom_tile(): Passa para o ggplot que o tipo do gráfico (neste caso, mapa de calor com blocos);
  • scale_fill_viridis_c(): Escala de preenchimento das cores do gráfico;
  • xlab() e ylab(): Rótulos dos eixos x e y, respectivamente;
  • geom_text(): Insere texto no gráfico gerado;
  • theme(): Função para ajustar textos ao longo do gráfico.

Lembrando que você pode ir modificando os valores aqui apresentados para verificar qual se adequa mais aos seus dados.

grafico <- ggplot(mapaCalor, aes(x = `Pontos Amostrados`, y = variable, fill = value))+
  geom_tile(color = "white", size = 0.25)+
  scale_fill_viridis_c(
    option = "C", begin = 0.0000, end = 1.000,
    limits = c(0, 1),
    name = "Escala Relativa\nde Valores Máximos\ne Mínimos",
    guide = guide_colorbar(
      direction = "horizontal",
      label.position = "bottom",
      title.position = "top",
      ticks = FALSE))+
  xlab("Pontos Amostrados")+ylab("Parâmetros")+
  geom_text(aes(label = round(value, 2)), color="white", size=3, fontface = "bold")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Logo após gerar esse gráfico, vamos salvá-lo na nossa pasta usando a função ggsave().

ggsave(grafico, file = "RIMA_AG_SUPERF.png", width=8, height=6, dpi=180, type="cairo")

Ao final disso tudo, você irá ter algo semelhante ao gráfico abaixo.

Mapa de calor (Heatmap) de valores de qualidade ambiental.
Mapa de calor (Heatmap) de valores de qualidade ambiental.

Note que com esse gráfico, fica mais fácil visualizar quais são os pontos onde há maior concentração de Sulfato e Sólidos Totais (i.e. no Rio Atola Boi P.01), enquanto vemos que os menores valores estão no Rio Atola Boi P.02.

Uma desvantagem desse tipo de visualização (com dados normalizados) é que fica difícil enxergar quais locais estão com valores acima do permitido pela legislação. Talvez uma alternativa seja colocar com números vermelhos esses valores no gráfico, mas isso fica para outro momento.

Você pode conferir o código completo que apresentamos na postagem clicando aqui.

Caso você tenha gostado da postagem, compartilhe. Caso tenha alguma dúvida, use os comentários que estaremos respondendo assim que possível.



Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".

Apostila Mapa de Localização Banner

Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de geoprocessamento, mineração e hidrologia. Busca soluções utilizando softwares como QGIS, R e Python.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *