Criando gráficos com múltiplos painéis
Introdução
Até agora, trabalhamos com gráficos em um único painel. No entanto, quando queremos comparar diferentes grupos ou diferentes variáveis, esse formato pode dificultar a interpretação. Nesta aula, continuaremos trabalhando com o conjunto de dados de MORBs e aprenderemos a criar gráficos com múltiplos painéis no ggplot2, uma abordagem que permite organizar melhor os dados e facilitar essas comparações.
Motivação
Na aula passada, aprendemos como mapear variáveis dentro de aes(). Abaixo, temos um exemplo de um gráfico de dispersão de TiO2 vs. MgO, onde os pontos são representados por cores de acordo com a coluna location:
Perceba que, mesmo com essa diferenciação por cor, ainda é difícil distinguir as características de cada grupo. Ajustar a transparência ajuda, mas não resolve completamente:
Em vez de tentar colocar todas as informações em um único gráfico, podemos dividir os dados em múltiplos painéis usando a função facet_wrap() do ggplot2, que cria um painel para cada categoria de uma variável.
# Uso básico:
facet_wrap(~ coluna)
# Use help() para ler mais sobre a função.Abaixo, podemos ver a função em uso:
Podemos modificar as dimensões da nossa figura com o parâmetro nrow e ncol de facet_wrap():
Se quisermos remover a legenda para evitar redundância, podemos fazê-lo com theme(legend.position = "none"):
Factors
Quando usamos facet_wrap(), o ggplot2 organiza os painéis em ordem alfabética. Para modificar essa ordem, precisamos trabalhar com categorias.
Em R, fazemos isso usando factors, um tipo especial de vetor usado para representar variáveis categóricas e que permite controlar a ordem e os rótulos das categorias.
Por exemplo, digamos que queremos modificar a ordem em que os painéis aparecem na figura que criamos acima. Para isso, podemos transformar a coluna location em um factor e usar o parâmetro levels pra definir essa nova ordem:
Agora, a ordem das categorias segue o vetor nova_ordem que criamos.
Também podemos modificar os rótulos exibidos no gráfico usando o parâmetro labels de factor(). Vamos retirar a palavra “MORB” dos rótulos:
Exemplo prático: diagramas de Harker.
Até agora, usamos facet_wrap() para comparar diferentes grupos, mantendo as mesmas variáveis nos eixos x e y. Mas e se quisermos comparar diferentes óxidos em função de MgO?
Para isso, primeiro precisamos entender por que foi possível usar facet_wrap() com a variável location.
Na tabela abaixo, observe que as variáveis usadas nos eixos (x e y) e na criação dos painéis correspondem à colunas do conjunto de dados.
No entanto, não podemos criar painéis tão facilmente para cada óxido. Na tabela abaixo, cada óxido está em sua própria coluna, em vez de termos uma única coluna contendo todos os óxidos:
Uma solução simples e eficaz é usar a função pivot_longer() do pacote tidyr da coleção tidyverse. Essa função permite reorganizar os dados, transformando várias colunas em duas: uma que indica a variável (por exemplo, o óxido) e outra que contém os valores correspondentes.
Dessa forma, passamos a ter uma estrutura mais adequada para uso com o ggplot2, facilitando a criação de painéis para cada variável. Veja na prática:
Com a tabela reorganizada, agora podemos usar facet_wrap() como nos exemplos anteriores:
Por padrão, facet_wrap() utiliza a mesma escala nos eixos para todos os painéis. No entanto, diagramas de Harker não são construídos dessa forma, pois cada óxido pode variar em diferentes intervalos de valores. Para resolver isso, podemos deixar o eixo y livre usando scales = "free_y":
Perceba que nosso conjunto de dados apresenta dois outliers que se destacam drasticamente dos demais: uma amostra com mais de 100 wt% de K2O, o que não faz sentido, e outra com cerca de 9 wt% de MnO, muito acima das demais. Vamos remover essas observações usando o verbo filter() do dplyr:
Agora, podemos mudar a ordem dos óxidos para uma ordem mais convencional em diagramas de Harker e mudar os rótulos para incluir números subscritos por meio de factor():
Agora, basta personalizar o nosso diagrama:
Também podemos torná-lo interativo com o pacote plotly, facilitando a identificação dos nomes das amostras:
Desafio opcional
Escreva um script em R (utilizando o RStudio) que crie um diagrama de Harker a partir dos dados de MORBs e OIBs.
Utilize cores diferentes para representar esses dois grupos e customize o gráfico com o tema de sua preferência. Não se esqueça de incluir rótulos apropriados.
O script deve:
- ler as tabelas de MORBs e OIBs da aula anterior;
- organizar os dados de forma adequada para a plotagem;
- gerar o diagrama como resultado final.
Dicas:
- recomendo filtrar possíveis outliers no conjunto de dados de OIBs, de forma semelhante ao que foi feito para MORBs.
- a ordem das camadas no
ggplot2importa: elementos adicionados por último aparecem por cima dos anteriores, o que pode influenciar quais dados ficam mais visíveis.
Abaixo, veja um exemplo do diagrama solicitado. O seu não precisa ficar igual.
Projeto
Esta aula marca o fim da parte teórica do curso. A partir de agora, vocês trabalharão nos seus projetos.
Não é necessário (nem esperado) que vocês se limitem apenas ao que foi estritamente abordado nas aulas. Vocês são incentivados a explorar outros tipos de visualização com o ggplot2 ou até mesmo utilizar outros pacotes, como o IsoplotR, por exemplo.
Para o projeto, vocês podem trabalhar com conjuntos de dados provenientes de bancos como o PetDB e o GEOROC, ou utilizar dados próprios. Os únicos requisitos são que os dados tenham relevância geológica e que as visualizações produzidas contribuam para uma melhor compreensão desses dados.
Como entrega, vocês devem submeter um (ou mais) script em .R e as figuras geradas (em qualquer formato).
Lembrem-se de que o projeto será acompanhado pelo docente. Em caso de dúvidas ou dificuldades, não hesitem em perguntar.
Outros tipos de gráficos
Neste curso, focamos na visualização com gráficos de dispersão por questões de tempo e utilidade. No entanto, o ggplot2 permite criar diversos outros tipos de gráficos. Para saber mais sobre essas possibilidades, você pode acessar este link.
De maneira geral, a gramática que aprendemos para construir gráficos de dispersão é bastante similar à utilizada em outros tipos de gráficos. Além disso, você é incentivado a explorar outras opções sempre que elas ajudarem a visualizar melhor os seus dados durante o projeto.
A seguir, apresentamos brevemente três exemplos com o ggplot2: um histograma, um boxplot (diagrama de caixa) e um gráfico de barras.
Histograma:
Boxplot:
Gráfico de barras:
Considerações finais
Com as ferramentas apresentadas ao longo do curso, vocês já têm uma base sólida para organizar, visualizar e interpretar dados geoquímicos de forma estruturada e reprodutível. No entanto, a visualização de dados é uma habilidade que se desenvolve e se aprimora com a prática. Experimentem diferentes abordagens, explorem novos conjuntos de dados e utilizem os gráficos como uma ferramenta de investigação científica. A partir de agora, o foco passa a ser a aplicação desses conhecimentos, tanto no projeto quanto nas suas próprias rotinas de análise de dados.