Gráfico de barras
Nesta aula vamos abordar como construir gráficos de barras utilizando tidyverse e ggplot2. Se esse é seu primeiro vídeo sobre ggplot2, recomendo assistir antes os 2 outros vídeos do canal primeiro, onde explico a lógica geral do pacote ggplot2 e como construir histogramas e gráficos de dispersão.
Os gráficos de barras são muito úteis para resumir dados e muito comuns para mostrar resultados de experimentos e realizar comparações entre fatores ou variáveis qualitativas.
Gráfico de barras simples
Vamos a um exemplo simples utilizando nosso conhecido pacote starwars. Iniciando por um problema simples, vamos contar quantos personagens existem para cada cor de olhos existente no conjunto de dados:
library(tidyverse)
library(ggplot2)
data(starwars)
starwars %>%
group_by(eye_color) %>%
summarise(
n = n()
)## # A tibble: 15 x 2
## eye_color n
## <chr> <int>
## 1 black 10
## 2 blue 19
## 3 blue-gray 1
## 4 brown 21
## 5 dark 1
## 6 gold 1
## 7 green, yellow 1
## 8 hazel 3
## 9 orange 8
## 10 pink 1
## 11 red 5
## 12 red, blue 1
## 13 unknown 3
## 14 white 1
## 15 yellow 11
Em seguida, vamos apresentar essa informação em formato de gráfico ao invés de tabela:
starwars %>%
group_by(eye_color) %>%
summarise(
n = n()
) %>%
ggplot(aes(x = eye_color, y = n)) +
geom_bar(stat = "identity") # stat = identity para usar a métrica sem transformar.Note que, apesar deste gráfico bonito, temos muitas categorias a serem mostradas. Neste caso, gosto de fazer uma modificação: colocar as barras em posição horizontal. Isso facilita muito a leitura das categorias:
starwars %>%
group_by(eye_color) %>%
summarise(
n = n()
) %>%
ggplot(aes(x = eye_color, y = n)) +
geom_bar(stat = "identity") +
coord_flip()Por fim, neste exemplo, vamos adicionar os rótulos em cada barra, facilitando a leitura do gráfico:
starwars %>%
group_by(eye_color) %>%
summarise(
n = n()
) %>%
ggplot(aes(x = eye_color, y = n, label = n)) +
geom_bar(stat = "identity") +
geom_label() + # este comando adiciona os rótulos
coord_flip()Desta forma agora podemos concluir que as cores de olhos mais frequentes são marrom (brown), azul (blue) e amarelo (yellow), respectivamente. Mais adiante veremos outras formas de personalizar este gráfico para ficar mais bonito.
Comparação de dois fatores
Vamos a seguir para um exemplo um pouco mais complicado, onde vamos comparar dois fatores: gênero (gender) e cor do cabelo (hair_color). Para isso, precisamos preparar nossa tabela de frequências:
starwars %>%
group_by(hair_color, gender) %>%
summarise(n = n())## # A tibble: 20 x 3
## # Groups: hair_color [13]
## hair_color gender n
## <chr> <chr> <int>
## 1 auburn feminine 1
## 2 auburn, grey masculine 1
## 3 auburn, white masculine 1
## 4 black feminine 3
## 5 black masculine 9
## 6 black <NA> 1
## 7 blond masculine 3
## 8 blonde feminine 1
## 9 brown feminine 6
## 10 brown masculine 11
## 11 brown <NA> 1
## 12 brown, grey masculine 1
## 13 grey masculine 1
## 14 none feminine 5
## 15 none masculine 31
## 16 none <NA> 1
## 17 unknown <NA> 1
## 18 white feminine 1
## 19 white masculine 3
## 20 <NA> masculine 5
E em seguida transformar em gráfico utilizando o que já aprendemos:
starwars %>%
group_by(hair_color, gender) %>%
summarise(n = n()) %>%
ggplot(aes(x = hair_color, y = n, fill = gender, label = n)) + # fill adiciona cores ao 2o fator: gender
geom_bar(stat = "identity") +
geom_label(position = "stack") + # especificar a posição por ser gráfico empilhado
coord_flip()Exemplo simples: experimento de 2 fatores
Vamos montar um gráfico mais tradicional. Imagine que você tem um experimento com 2x2 fatores com interação entre deles cujos dados fictícios são produzidos a seguir:
- O fator A tem 2 níveis.
- O favor B também tem 2 níveis.
- Média dos resultados na coluna media_valores.
experimento = data.frame(
fator_a = c("nivel 1","nivel 1", "nivel 2", "nivel 2"),
fator_b = c("nivel 1","nivel 2", "nivel 1", "nivel 2"),
media_valores = c(55,23,9,77)
)
experimento## fator_a fator_b media_valores
## 1 nivel 1 nivel 1 55
## 2 nivel 1 nivel 2 23
## 3 nivel 2 nivel 1 9
## 4 nivel 2 nivel 2 77
E gráfico de barras, com 2 fatores, pode ser produzido da seguinte forma:
experimento %>%
ggplot(aes(x = fator_a, y = media_valores, fill = fator_b, label = media_valores)) +
geom_bar(stat = "identity", position="dodge") + # Posição dodge para colocar barras lado a lado
geom_label(position = position_dodge(width = 1)) # Para label, dodge é especificado de forma diferente