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, com o parâmetro nrow sendo utilizado para definir o número de fileiras de painéis. De forma semelhante, também poderíamos usar o parâmetro ncol para definir o número de colunas.
Se quisermos remover a legenda para evitar redundância, podemos fazê-lo com theme(legend.position = "none"):
Para ajustar os rótulos de cada painel, podemos usar o parâmetro labeller junto com a função as_labeller(), que permite converter um vetor nomeado em rótulos mais informativos:
Diagrama de Hacker
Até agora, usamos facet_wrap() para comparar diferentes grupos, mantendo as mesmas variáveis (MgO e TiO2) nos eixos. Mas e se quisermos comparar diferentes óxidos em função do 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:
Factors
Tanto ao usar facet_wrap() com location quanto com oxides, o ggplot2 organizou os painéis em ordem alfabética. Para location, isso não é um problema, mas para diagramas de Harker pode ser, já que normalmente organizamos os óxidos em uma ordem específica.
Para definir 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.
Para ilustrar esse conceito, vamos utilizar o conjunto de dados iris, que já vem incluído no R e é frequentemente usado para fins didáticos.
Primeiro, vamos criar um gráfico de dispersão sem modificar a ordem da variável categórica Species:
Nesse caso, as categorias são exibidas em ordem alfabética.
E se quisermos definir uma ordem específica para essas categorias? Podemos fazer isso transformando a variável Species em um factor e usando o parâmetro levels:
Agora, a ordem das categorias segue o vetor definido em levels.
Também podemos modificar os rótulos exibidos no gráfico usando o parâmetro labels. Neste caso, vamos apenas ajustar a capitalização dos nomes:
Aplicando esse mesmo raciocínio ao nosso diagrama de Harker, temos o seguinte código:
Agora, basta personalizar o nosso diagrama:
Também podemos torná-lo interativo com o pacote plotly, facilitando a identificação dos nomes das amostras:
Exercício
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.
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.
Para ilustrar isso, a seguir apresentamos 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:
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.
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.