4 Introdução ao ggplot 📊

A visualização de dados pode ser considerada uma das mais importantes etapas do processo de análise de dados, é através dela que diversos fenômenos presentes nos dados podem ser explicados e visualizados.

Quando não souber como explicar, mostre, afinal, uma imagem vale mais que mil palavras.

Porém, criar formas de visualizar dados pode não ser uma atividade simples, muitas etapas acabam sendo necessárias. É neste contexto que entra o ggplot, uma biblioteca de alto nível, criada para tornar o processo de visualização de dados mais simples, possuindo implementações em R com o pacote ggplot2 e em Python com o pacote plotnine, ambos completamente compativeis.

Esta seção apresenta os conceitos básicos necessários para a utilização do ggplot.

Os exemplos abaixo serão apresentados em R, mas você pode sem nenhum problema executar os códigos em Python através da biblioteca plotnine.

4.1 O que é o ggplot?

Bom, ggplot é um pacote em R criado por Hadley Wickham e seus colaboradores, como mencionado anteriormente, sua sintaxe se baseia na obra The Grammar of Graphics. Assim, a gramática dos gráficos é um conjunto de camadas, cujo o mapeamento dos atributos é chamado de aesthetics. O esqueleto pode ser escrito assim:

Vamos explicar linha por linha do código acima. Vamos lá 🧮.

4.2 Mapeamento Estético

A estética refere-se a cada aspecto de um dado elemento gráfico. Descrevemos as posições (position) por um valor x e y, mas outros sistemas de coordenadas são possíveis. É possível alterar a forma (shape), tamanho (size) e cor (size) dos elementos (Wilke 2019). A imagem abaixo, retirada do livro do Wilke (2019), mostra os componentes do mapeamento estético.

Vamos começar criando um Data frame, deste modo:

aluno_id aluno_sexo aluno_curso aluno_media aluno_avaliacao
1 Masculino Historia 2.1 Ruim
2 Feminino Historia 3.5 Ruim
3 Masculino Matemática 4.0 Excelente
4 Feminino Estatística 1.0 Ruim
5 Masculino Matemática NA Nenhum
6 Feminino Estatística 4.9 Excelente

Agora, vamos mapear os atributos do nosso Data Frame escola, desta forma:

Bom, agora que mapeamos nossos atributos é possível ver que no eixo x está escrito aluno_id e no eixo y está escrito aluno_media.

4.3 Objetos geométricos

Os objetos geométricos representam os objetos a serem adicionados no gráficos, por exemplo, pontos (geom_point), colunas (geom_col), linha (geom_line). Observe que, os objetos geométricos são sufixos do métodos geom_. A tabela abaixo, retirada do livro Ciência de dados em R, mostra os tipos geométricos mais comuns:

Tipo Objeto Geométrico
Dispersão (scatterplot) geom_point()
Gráfico de pontos geom_point()
Gráfico de barras Histograma geom_bar() e geom_col() geom_histogram()
Boxplot geom_boxplot()
Densidade geom_density()
Gráfico de linhas geom_line()

Vamos utilizar geom_point para fazer um gráfico de pontos no conjunto de dados, deste modo:

Olha que legal. No entanto, ainda faltam informações no nosso gráficos, por exemplo, no eixo x não sabemos se começa com 0 ou 1 e o nome dos atributos não estão informativos.

4.4 Escalas

Bom, agora é a hora de melhorar nosso gráfico, que por sinal está bem estranho, vamos lá!

O ggplot cria as escalas de forma automática, no entanto, é interessante ajustar as escalas para manter o gráfico mais fidedigno em relação aos seus eixos.

Primeiro, vamos mudar o nome dos nossos atributos em cada eixo e também alterar as escalas:

Como as variáveis utilizadas são contínuas, podemos utilizar a função scale_x_continuous. Caso seja uma variável categórica, por exemplo, o nome dos alunos, usamos scale_x_discrete.

Ainda falta mais informações, por exemplo, o título do nosso gráfico e melhorar a legenda.

É possível observar que o aluno com id 5 não possui média em nenhuma disciplina. Agora, que tal dividirmos nosso gráfico em sub gráficos? 🆒.

4.5 Subplots (facet)

Podemos dividir nosso gráfico em subgráficos utilizandos as funções facet_grid e facet_wrap:

-facet_grid: Forma uma matriz de painéis definidos por linhas e colunas. É mais útil quando se tem duas variáveis discretas, e todas as combinações das variáveis existem nos dados.

-facet_wrap: Converte painéis de uma dimensão para duas dimensões.

Definições retiradas da documentação e do livro Oliveira, Guerra, and Mcdonell (2018).

Usamos o labs para mostrar que essa função também altera o nome dos eixos e o título

4.7 Exemplos

Nesta subseção vamos usar conjuntos de dados reais para demonstrar o uso do ggplot2 com mais exemplos.

4.8 Gráfico de colunas

Para criar nosso gráfico de colunas vamos utilizar o conjunto de dados de tempestade, desta forma:

## # A tibble: 5 x 13
##   name   year month   day  hour   lat  long status category  wind pressure
##   <chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>  <ord>    <int>    <int>
## 1 Amy    1975     6    27     0  27.5 -79   tropi… -1          25     1013
## 2 Amy    1975     6    27     6  28.5 -79   tropi… -1          25     1013
## 3 Amy    1975     6    27    12  29.5 -79   tropi… -1          25     1013
## 4 Amy    1975     6    27    18  30.5 -79   tropi… -1          25     1013
## 5 Amy    1975     6    28     0  31.5 -78.8 tropi… -1          25     1012
## # … with 2 more variables: ts_diameter <dbl>, hu_diameter <dbl>

Para mais informações do conjunto de dados, basta utilizar ?dplyr::storms

Como podemos observar, o dado consiste em um série temporal de tempestades registradas. Qual é o tipo de tempestade mais recorrente?

O pacote ggplot2 possui diversas extensões oficiais, as quais implementam diversos métodos de visualização. No próximo exemplo vamos usar a extesão Lemon.

4.9 Extensão do ggplot2 - Lemon

Nesta subseção vamos utilizar os dados dos preços de diamantes, podemos importá-lo desta forma:

## # A tibble: 5 x 10
##   carat cut     color clarity depth table price     x     y     z
##   <dbl> <ord>   <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23  Ideal   E     SI2      61.5    55   326  3.95  3.98  2.43
## 2 0.21  Premium E     SI1      59.8    61   326  3.89  3.84  2.31
## 3 0.23  Good    E     VS1      56.9    65   327  4.05  4.07  2.31
## 4 0.290 Premium I     VS2      62.4    58   334  4.2   4.23  2.63
## 5 0.31  Good    J     SI2      63.3    58   335  4.34  4.35  2.75

Vamos utilizar os atributos cut, price e clarity, correspodentes a qualidade do corte do diamente, ao preço e a medição de qualidade, respectivamente.

Bom, sabemos que o ggplot é bem completo, mas, só abordamos uma pequena parcela. Com o tempo vamos adicionando mais materiais. Para se aprofundar no pacote, veja nossas análises no dataAt 💃.