Capítulo 5 Vizualização com ggplot
Este capítulo foi escrito baseado em Cotton (2013) e o conteúdo apresentado aqui foi usado como base para o minicurso “R para não-programadores” que ministrei junto com a prof. Marina Bicudo.
ggplot2
é uma biblioteca popular para criação de gráficos em R.
O ggplot2
funciona seguindo o conceito de “grammar of graphics” (gramática dos gráficos). Você constrói um gráfico camada por camada, adicionando elementos conforme necessário.
Comece criando um objeto ggplot
com a função ggplot()
.
Essa função recebe o conjunto de dados que você deseja visualizar, por exemplo os dados de voos do pacote nycflights
.
Vamos supor que nosso objetivo seja entender a relação entre distância do voo e atraso. Para isso, utilizaremos um .
5.1 Criando um objeto ggplot
Para começar, vamos criar um objeto ggplot utilizando a base de dados flights
, calculando o atraso médio dos voos por destino.
library(tidyverse)
atrasos <- flights %>%
filter(!is.na(distance), !is.na(arr_delay)) %>%
group_by(dest) %>%
summarise(distance = mean(distance),
delay = mean(arr_delay))
head(atrasos)
## # A tibble: 6 × 3
## dest distance delay
## <chr> <dbl> <dbl>
## 1 ABQ 1826 4.38
## 2 ACK 199 4.85
## 3 ALB 143 14.4
## 4 ANC 3370 -2.5
## 5 ATL 757. 11.3
## 6 AUS 1514. 6.02
Observe que o objeto ggplot
gerado representa apenas uma tela em branco, pois, dos três componentes básicos, apenas a base de dados (atrasos) foi especificada.
5.2 Gráfico de Dispersão
Nosso objetivo é criar um gráfico de dispersão, utilizando a geometria (geom_point
).
Vamos mapear as variáveis (x e y) dentro do componente de estética (aesthetics):
Podemos criar uma variável que indica se houve atraso ou adiantamento, ajustando a cor dos pontos de acordo com essa nova variável:
atrasos %>%
mutate(sinal = ifelse(delay > 0, "- atrasou", "+ adiantou")) %>%
ggplot(aes(x = distance, y = delay)) +
geom_point(aes(color = sinal))
Além disso, adicionaremos uma camada () com a linha de tendência (equação da reta):
atrasos %>%
mutate(sinal = ifelse(delay > 0, "atrasou", "não atrasou")) %>%
ggplot(aes(x = distance, y = delay)) +
geom_point(aes(color = sinal)) +
geom_smooth(method = "lm",
se = FALSE,
color = "black")
## `geom_smooth()` using formula = 'y ~ x'
Vamos agora personalizar o título do gráfico e dos eixos:
atrasos %>%
mutate(sinal = ifelse(delay > 0, "Atrasou", "Não atrasou")) %>%
ggplot(aes(x = distance, y = delay)) +
geom_point(aes(color = sinal)) +
geom_smooth(method = "lm",
se = FALSE,
color = "black") +
labs(title = "Distância x Atrasos (vôos partindo de NY)",
x = "Distância (em milhas)",
y = "Atraso na decolagem (em minutos)",
color = "")
## `geom_smooth()` using formula = 'y ~ x'
Por fim, podemos ajustar a aparência geral do gráfico:
atrasos %>%
mutate(sinal = ifelse(delay > 0, "Atrasou", "Não atrasou")) %>%
ggplot(aes(x = distance, y = delay)) +
geom_point(aes(color = sinal)) +
geom_smooth(method = "lm",
se = FALSE,
color = "black") +
labs(title = "Distância x Atrasos (vôos partindo de NY)",
x = "Distância (em milhas)",
y = "Atraso na decolagem (em minutos)",
color = "") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
5.3 Gráfico de Colunas
Vamos supor agora que nosso interesse seja criar um gráfico de colunas comparando o atraso médio dos 5 principais destinos que mais sofrem atrasos:
## # A tibble: 5 × 3
## dest distance delay
## <chr> <dbl> <dbl>
## 1 CAE 604. 41.8
## 2 JAC 1876. 28.1
## 3 OKC 1325 30.6
## 4 TUL 1215 33.7
## 5 TYS 638. 24.1
Construindo nosso gráfico de colunas utilizando geom_col()
:
Perceba que as colunas estão organizadas em ordem alfabética. Para organizá-las em ordem decrescente da variável delay, podemos usar a função reorder:
Podemos pintar todas as colunas da mesma cor:
Vamos agora alterar os títulos e a aparência do gráfico:
top_5 %>%
ggplot(aes(x = reorder(dest, -delay), y = delay)) +
geom_col(fill = "lightblue") +
labs(title = "Destinos com maior atraso médio (top 5)",
y = "Atraso (em minutos)",
x = "") +
theme_minimal()
Veja mais detalhes em: