Como criar múltiplos gráficos com loops utilizando R e ggplot2?

Quer criar vários gráficos utilizando poucas linhas de código? Aprenda a utilizar loops no R e com o ggplot2 e veja como isso pode te economizar tempo.

Já falamos em postagens passadas como criar mais de um gráfico no R (veja a postagem clicando aqui: “Como criar e combinar gráficos no R?“).  Também já criamos rotinas (isto é, loops) para classificar nossos dados (“Como classificar dados no R“).

Agora, vamos unir esses dois conhecimentos para criar e salvar vários gráficos de uma forma rápida e fácil.

Para esta postagem, estaremos utilizando os dados disponível no Sistema de Informação de Solos Brasileiros da EMBRAPA. Nele, selecionei as propriedades químicas dos solos de Santa Catarina e iremos, primeiramente, ajeitar os dados.

Na Ciência dos Dados, esta preparação dos dados, de forma a torna-la útil e de fácil aplicação de procedimentos de análise, é chamada de Data Munging (ou ainda, Data Wragling).

Você pode baixar os dados que utilizaremos nesta postagem clicando no link dadoSolos.

Organizando os dados no R

Inicialmente, vamos utilizar a função setwd() para determinar o local onde iremos carregar e salvar nossos dados e a função read.csv() para carregar a nossa planilha de dados.

Em seguida, vamos realizar alguns procedimentos para excluir linhas em branco e colunas que não utilizaremos na análise.


setwd("C:/Users/ferna/Desktop/B2E")

dadoSolos <- read.csv(file = "dadoSolos.csv", sep = ";", dec=".", header = TRUE)

Veja que o nosso “working directory” (diretório de trabalho), definido na função setwd(), é uma pasta na área de trabalho. Agora, não precisamos ficar, todo momento, digitando o caminho inteiro para os arquivos desta pasta.

Vamos agora excluir as colunas que não temos interesse.

Lembre-se que é necessário saber previamente qual é o índice (número) de cada uma das colunas das variáveis de interesse.

Neste caso, só iremos avaliar as colunas com os seguintes parâmetros: pH (H2O), Cálcio, Magnésio, Potássio, Alumínio Trocável, Carbono Orgânico, Nitrogênio Total e Relação C/N. Portanto, precisamos excluir as outras colunas.


dadoSolos <- dadoSolos[,c(1,4,5,7,11,25,26,27)]
names(dadoSolos) <- c("pH (H2O)", "Ca", "Mg", "K", "Al", "COrg", "Nt", "CN")

Note que os nossos índices são 1, 4, 5, 7, 11, 25, 26 e 27. Dependendo do seu conjunto de dados, tais valores irão mudar.

Neste caso, você pode utilizar o seguinte comando para descobrir qual é o índice de cada coluna: names(dadoSolos). Em outras situações, você terá que contar manualmente.

Também utilizamos a função names() para renomear nossas colunas, pois os nomes anteriores eram muito extensos.

Se você aplicar a função summary() para as colunas de cálcio e magnésio (desta maneira: summary(dadoSolos$Ca) ou summary(dadoSolos$Mg)), irá notar que há mais de 500 dados não disponíveis (isto é, NA).

Nesta nossa análise, vamos partir do princípio que esses dados são necessários, assim, vamos precisar excluir tais linhas que contenham NAs.


dadoSolos <- na.omit(dadoSolos)

Esse procedimento é simples e é executado com a função na.omit().

Criando múltiplos gráficos no R

Já terminamos de organizar nossos dados e vamos criar algumas variáveis que irão aparecer como rótulos nos nossos gráficos.


rotulos <- c("pH (H2O)", "Cálcio", "Magnésio", "Potássio", "Alumínio Trocável", "Carbono Orgânico", "Nitrogênio Total", "Relação C/N")

A vantagem de organizar os rótulos antes de plotarmos ele esta no momento da criação do loop (rotina), onde precisaremos apenas informar o índice do rótulo. Além disso, podemos criar nomes mais extensos e com caracteres especiais.

Agora, vamos iniciar a biblioteca ggplot2 e grid (caso você não tenha elas instaladas, utilize a função install.packages(), descomentando elas do código abaixo).


# install.packages("ggplot2")
# install.packages("grid")
library(ggplot2)
library(grid)

Com as bibliotecas carregadas, vamos iniciar a construção da nossa rotina.

Primeiro, vamos criar nosso bloco de loop for, indicando os índices que estarão na rotina (do 1 ao 8). Em seguida, vamos criar uma variável para armazenar um resumo dos nossos dados, tais como valores mínimos, médios e máximos, usando a função summary().

Esses dados não são gráficos, eles serão tratados como objetos gráficos (Graphic Objects = Grob) e como eles estão organizados na forma de tabela, vamos usar a função tableGrob() para organizar esses dados.

Abaixo disso, iremos salvar os dados gráficos em uma variável utilizando a função ggplot() e a geom_boxplot() para criar um gráfico do tipo Box Plot.

Com dois objetos para serem plotados, vamos unir eles em uma grade com a função grid.arrange(). Caso você precise adicionar mais de dois gráficos, configure o parâmetro ncol (número de colunas) para a quantidade de colunas que você deseja, aqui, iremos usar apenas 2.

Por fim, com a função ggsave(), vamos salvar os gráficos gerados e usar a função dev.off() para “desligar” a plotagem da figura naquela rotina.


for(i in 1:8){
resumoDados <- tableGrob(summary(dadoSolos[i]))

solosNum <- ggplot(data=dadoSolos, aes(x = "", y = dadoSolos[,i])) +
geom_boxplot() + labs(x = rotulos[i], y = "")

grFinal <- grid.arrange(solosNum, resumoDados, ncol = 2)

ggsave(grFinal, file = paste0("B2E", i, names(dadoSolos)[i],".png"), 
width = 5, height = 3, dpi = 240)
dev.off()
}

Na função ggsave(), utilizamos também a função paste0() para unir o número da rotina com o nome dado à coluna do nosso banco de dados.

Lembre-se também que os parâmetros de tamanho do ggsave (width e height) devem estar em polegadas.

Veja abaixo as figuras geradas com este procedimento.

Notou algo estranho?

Pois é, no pH (H2O), tem um valor igual à 50! E como sabemos, os valores de pH variam entre 0 e 14.

De volta ao data munging para remover essa linha, que provavelmente deve ter sido um erro de digitação.


dadoSolos <- dadoSolos[dadoSolos[1] != 50, ]

Agora, rodamos nossa rotina novamente (você pode rodar ela somente para o pH, trocando o 1:8 por 1) e teremos nosso Box Plot do pH (H2O) do solo expresso corretamente.

Box Plot do parâmetro pH (H2O), corrigido.
Box Plot do parâmetro pH (H2O), corrigido.

Aqui trabalhamos apenas com 8 parâmetros, mas imagine se você têm 20 parâmetros? 50? Criar uma gráfico para cada um deles, manualmente, é muito trabalhoso.

Depois do código pronto, você pode aproveitar e utilizar ele sempre que houver uma atualização dos seus dados (por exemplo, a cada campanha de monitoramento ambiental) e obter novos gráficos de forma rápida e eficiente.

Ficou com alguma dúvida? Deixe ela nos 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".


Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de recuperação ambiental, geoprocessamento e ciência do solo. Busca soluções utilizando softwares como ArcGIS, R e MATLAB.

Deixe uma resposta

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