ggplot2: introdução à gramática de gráficos

R-Ladies São Paulo
aMostra IME/USP

01/Oct/2024

Hoje

Introdução do pacote ggplot2

  • Instalação do pacote ggplot2

  • Lógica e estrutura básica de montagem de um gráfico no ggplot

  • Camadas de um gráfico

Arte por Allison Horst

Pré-requisitos

R e RStudio instalados no seu notebook

RStudio

RStudio é a IDE (integrated development environment) da Linguagem R, ou seja, o ambiente que utilizamos para editar e executar os códigos em R. Tem quatro áreas, conforme a figura abaixo:

Fonte: Curso Introdução ao R - Fatec

Vamos começar?

O que é o ggplot2?

Pacote para visualização de dados, criado por Hadley Wickham e mantido pela Posit.

Por que usar o ggplot2 para montar minhas visualizações?

  • Versátil e Esteticamente rico.

  • Implementação dos conceitos de Grammar of Graphics.

Arte por Allison Horst

Grammar of Graphics

  • A origem do nome GGplot

  • Estrutura que segue uma abordagem em camadas para descrever e construir visualizações ou gráficos de maneira estruturada.

  • Uma visualização geralmente tem vários componentes ou aspectos, e alavancar essa gramática de gráficos em camadas nos ajuda a descrever e entender cada componente envolvido na visualização - em termos de dados, estética, escala, objetos e assim por diante.

Sintaxe básica do ggplot

  • Um gráfico feito com ggplot2 é uma soma de camadas.

  • Não precisa utilizar todos os componentes seguintes em seu gráfico, mas é interessante saber que existem.

Sintaxe básica do ggplot

  • A função ggplot() inicia um gráfico ggplot.

  • Utilizamos o símbolo + para somar as camadas.

 ggplot(data, aesthetics) +
    geometries(statistics) +
    facets +
    coordinates +
    theme

Construção de um gráfico

  1. Base de dados que temos interesse em analisar e extrair informação.

Construção de um gráfico

  1. Base de dados que temos interesse em analisar e extrair informação.

  2. Mapear as variáveis que queremos relacionar.

Construção de um gráfico

  1. Base de dados que temos interesse em analisar e extrair informação.

  2. Mapear as variáveis que queremos relacionar.

  3. Definir o objeto geométrico mais adequado: linha, ponto, barras etc.

Construção de um gráfico

  1. Base de dados que temos interesse em analisar e extrair informação.

  2. Mapear as variáveis que queremos relacionar.

  3. Definir o objeto geométrico mais adequado: linha, ponto, barras etc.

ggplot(data = [BASE DE DADOS], 
       mapping = aes(x = [VARIÁVEL X], y = [VARIÁVEL Y])) +
  geom_[OBJETO GEOMÉTRICO]()

Objetos geométricos

  • Gráficos de dispersão: geom_point()

  • Gráficos de barras: geom_col() ou geom_bar()

  • Gráficos de linhas: geom_line()

  • Histograma: geom_hist()

  • Boxplot: geom_boxplot()

  • Densidade: geom_density()

  • Suavização: geom_smooth()

  • Adicionar rótulos ou textos: geom_label() ou geom_text()

Mão na massa

Mão na massa

Primeiro, precisamos instalar os pacotes necessários e carregá-los:

  • Pacote dplyr para manuseio dos dados.

  • Pacote ggplot2 para a visualização dos dados.

# install.packages('dplyr')
# install.packages('ggplot2')

library(ggplot2)
library(dplyr)

Mão na massa

Selecionar a base de dados

  • Na maioria das vezes precisaremos organizar e limpar os dados antes de utilizar o ggplot. Aqui vamos partir de uma base já organizada.

  • Para a parte prática, utilizaremos a base do R airquality.

# Leitura da base de dados
airquality <- as_tibble(datasets::airquality)
head(airquality)
# A tibble: 6 × 6
  Ozone Solar.R  Wind  Temp Month   Day
  <int>   <int> <dbl> <int> <int> <int>
1    41     190   7.4    67     5     1
2    36     118   8      72     5     2
3    12     149  12.6    74     5     3
4    18     313  11.5    62     5     4
5    NA      NA  14.3    56     5     5
6    28      NA  14.9    66     5     6

Mão na massa

Mapear as variáveis

As variáveis escolhidas para a minha análise são: Wind e Temp.

select(airquality, Wind, Temp)
# A tibble: 153 × 2
    Wind  Temp
   <dbl> <int>
 1   7.4    67
 2   8      72
 3  12.6    74
 4  11.5    62
 5  14.3    56
 6  14.9    66
 7   8.6    65
 8  13.8    59
 9  20.1    61
10   8.6    69
# ℹ 143 more rows

Mão na massa

Definir objeto geométrico

Como as variáveis Wind e Temp são numéricas, vamos fazer um gráfico de pontos, chamando a camada geom_point().

Mão na massa

  1. Base de dados: airquality.

  2. Mapear as variáveis: Wind (x) e Temp (y).

  3. Objeto geométrico: pontos (geom_point()).

ggplot(data = airquality,
       mapping = aes(x = Wind, y = Temp)) +
  geom_point() # Camada 1

Mão na massa

Mão na massa

O mapeamento das variáveis também pode ser inserido no objeto geométrico:

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp))

Mão na massa

Como podemos melhorar?

Arte por Allison Horst

Mão na massa

Como podemos melhorar?

  • Títulos e subtítulos
  • Nomear eixos
  • Cores e tamanhos dos objetos geométricos
  • Temas

Mão na massa

Cores e tamanhos dos objetos geométricos

  • Caso 1: meramente estéticos
  • Dentro do objeto geométrico (geom_point())
  • Cor: geom_point(color = "cor desejada")
  • Tamanho dos pontos geom_point(size = valor numérico)
ggplot(data = airquality,
       mapping = aes(x = Wind, y = Temp)) +
  geom_point(color = "blue", size = 4)  # Camada 1

Mão na massa

Cores e tamanhos dos objetos geométricos

Mão na massa

Cores e tamanhos dos objetos geométricos

  • Caso 2: associados a uma terceira variável: aes() (mapeamento das variáveis)
  • Dentro do objeto geométrico (geom_point())
  • Cor: geom_point(color = variável)
  • Tamanho dos pontos geom_point(size = variável)

Vou associar a cor à variável Month (numérico de 5 a 9)

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 2)  # Camada 1

Mão na massa

Cores e tamanhos dos objetos geométricos

Mão na massa

Cores e tamanhos dos objetos geométricos

Mão na massa

Cores e tamanhos dos objetos geométricos

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month)))  # Camada 1

Mão na massa

Títulos e subtítulos

  • Nova camada: ggtitle("Titulo", "subtítulo").
ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento")  # Camada 2

Mão na massa

Títulos e subtítulos

Mão na massa

Eixos

  • Nova camada: labs(x = "nome no eixo x", y = "nome no eixo y").
ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") # Camada 3

Mão na massa

Eixos

Mão na massa

Eixos

  • Alterar limites das coordenadas: xlim(c(a,b)) e ylim(c(a,b)).
ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  xlim(c(0,30)) + # Camada 4
  ylim(c(50,150)) # Camada 5

Mão na massa

Eixos

Mão na massa

Legenda

  • Nova camana: guides().
  • Associar com o tipo de representação: cor
ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  guides(color=guide_legend(title="Mês")) # Camada 3

Mão na massa

Legenda

Mão na massa

Temas

  • Alterar temas dos gráficos: theme_().
  • Muitos temas!

Tema clássico

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  guides(color=guide_legend(title="Mês")) + # Camada 3
  theme_classic()  # Camada 4

Mão na massa

Temas | Clássico

Mão na massa

Temas | Clássico / Tamanho da fonte

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  guides(color=guide_legend(title="Mês")) + # Camada 3
  theme_classic(16)  # Camada 4

Mão na massa

Temas | Clássico / Tamanho da fonte

Mão na massa

Temas

  • Alterar temas dos gráficos: theme_().
  • Muitos temas!

Tema escuro

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  guides(color=guide_legend(title="Mês")) + # Camada 3
  theme_dark(16)  # Camada 4

Mão na massa

Temas | Escuro

Mão na massa

Temas

  • Alterar temas dos gráficos: theme_().
  • Muitos temas!

Tema mínimo

ggplot(data = airquality) +
  geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1
  ggtitle("Qualidade do ar", "Temperatura pelo Vento") +  # Camada 2
  labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3
  guides(color=guide_legend(title="Mês")) + # Camada 3
  theme_minimal(16)  # Camada 4

Mão na massa

Temas | Mínimo

Dica

Perguntas?

Obrigada <3