Explorando Gráficos de Barras com a Base de Dados Pinguins 🐧
Introdução Este script tem como objetivo explorar e visualizar a distribuição de variáveis categóricas utilizando a popular base de dados “pinguins” (penguins) do pacote dados em R. Através desta análise, demonstramos diversas formas de criar e personalizar gráficos de barras, uma ferramenta essencial na estatística descritiva e na comunicação de dados.
A base “pinguins” é um excelente recurso para a prática de visualização, contendo informações sobre três espécies de pinguins da Antártica (Adelie, Chinstrap e Gentoo), o sexo e a ilha onde foram coletados.
Neste trabalho, focamos em dois tipos de análise com gráficos de barras:
Frequência Simples (Univariada): Distribuição das espécies.
Frequência Cruzada (Bivariada): Relação entre a espécie e a ilha de coleta.
Utilizaremos o pacote ggplot2 para criar e customizar visualizações, garantindo que sejam informativas e fáceis de interpretar, com destaque para o uso de percentuais e ordenação de barras.
Carregamento de Pacotes e Dados Iniciamos carregando os pacotes necessários para manipulação (dplyr, forcats), visualização (ggplot2), customização (ggthemes) e formatação (scales). O banco de dados pinguins é então carregado.
Carregando pacotes e o banco de dados “pinguins”
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dados) # biblioteca com vários exemplos de BD
library(ggthemes)
library(ggplot2)
library(summarytools)
##
## Anexando pacote: 'summarytools'
##
## O seguinte objeto é mascarado por 'package:tibble':
##
## view
library(dplyr)
library(forcats)
library(scales)
##
## Anexando pacote: 'scales'
##
## O seguinte objeto é mascarado por 'package:purrr':
##
## discard
##
## O seguinte objeto é mascarado por 'package:readr':
##
## col_factor
pinguins
## # A tibble: 344 × 8
## especie ilha comprimento_bico profundidade_bico comprimento_nadadeira
## <fct> <fct> <dbl> <dbl> <int>
## 1 Pinguim-de-ad… Torg… 39.1 18.7 181
## 2 Pinguim-de-ad… Torg… 39.5 17.4 186
## 3 Pinguim-de-ad… Torg… 40.3 18 195
## 4 Pinguim-de-ad… Torg… NA NA NA
## 5 Pinguim-de-ad… Torg… 36.7 19.3 193
## 6 Pinguim-de-ad… Torg… 39.3 20.6 190
## 7 Pinguim-de-ad… Torg… 38.9 17.8 181
## 8 Pinguim-de-ad… Torg… 39.2 19.6 195
## 9 Pinguim-de-ad… Torg… 34.1 18.1 193
## 10 Pinguim-de-ad… Torg… 42 20.2 190
## # ℹ 334 more rows
## # ℹ 3 more variables: massa_corporal <int>, sexo <fct>, ano <int>
O código calcula a frequência percentual de cada espécie. Para clareza, a função forcats::fct_reorder() é crucial, pois ordena as barras em ordem decrescente, tornando a identificação da espécie majoritária imediata.
A. Gráfico Vertical Este formato é o padrão e ideal quando os nomes das categorias no eixo X são curtos. Os rótulos de percentual (geom_text) são adicionados acima das barras para precisão.
### Uma variavel categorica
## Frequencia simples -
# Grafico com percentuais vertical
pinguins %>%
group_by(especie) %>%
count() %>% ungroup() %>%
mutate(
porc = n / sum(n),
rotulo = scales::number(100 * porc, accuracy = 0.1, suffix = "%")
) %>%
ggplot(aes(x = forcats:: fct_reorder(especie, -porc), y=porc)) +
geom_bar(stat = "identity", fill="steelblue1") +
geom_text(aes(label=rotulo), size=3.2, vjust=-0.4)+
scale_y_continuous(labels = scales::percent_format(),
expand = expansion(mult = c(0, 0.05))) +
labs(y="Frequencia (%)", x = "Espécie")+
theme_classic()
B. Gráfico Horizontal O formato horizontal é recomendado quando os nomes
das categorias são mais longos, evitando sobreposição de rótulos no
eixo. Para este caso, a variável especie é mapeada para o eixo Y.
# Grafico com percentuais - Horizontal
pinguins %>%
group_by(especie) %>%
count() %>% ungroup() %>%
mutate(
porc = n / sum(n),
rotulo = scales::number(100 * porc, accuracy = 0.1, suffix = "%")
) %>%
ggplot(aes(y = forcats:: fct_reorder(especie, -porc), x=porc)) +
geom_bar(stat = "identity", fill="steelblue1") +
geom_text(aes(label=rotulo), size=3.2, hjust=-0.2)+
scale_x_continuous(labels = scales::percent_format(),
expand = expansion(mult = c(0, 0.15))) +
labs(x="Frequencia (%)", y = "Espécie")+
theme_classic()
O primeiro passo é calcular a porcentagem da espécie DENTRO de cada ilha.
perc_ilha <- pinguins %>% group_by(ilha) %>% count(especie) %>%
mutate(percent=n/sum(n) * 100)
A. Barras Empilhadas (Stacked Bar Chart) Este gráfico mostra a composição percentual das espécies (cores) dentro de cada ilha (eixo X). A altura total de cada barra de ilha é 100%. É excelente para visualizar proporções.
ggplot(
perc_ilha,
aes(x = ilha, y = percent, fill = especie)) +
geom_bar(stat = "identity") +
geom_text(aes(label = sprintf("%.1f%%", percent)),
position=position_stack(vjust=0.5),
size=3.2, color="white") +
labs(x="Ilha",
y="Percentual (%)",
fill= "Especie")+
theme_classic()
Conclusão: É fácil observar que as Ilhas Biscoe e Dream têm apenas duas espécies, enquanto a Ilha Torgersen abriga pinguins Adelie e, em menor proporção, Gentoo.
B. Barras Agrupadas (Dodged Bar Chart) Neste formato, as barras de diferentes espécies são agrupadas lado a lado para cada ilha. Isso facilita a comparação direta do tamanho relativo das categorias dentro da ilha e entre as ilhas.
## Como apresentar dados de duas variaveis categóricas
## Frequencia com percentuais - barras agrupadas
# Calcula os percentuais de especie por ilha
perc_ilha <- pinguins %>% group_by(ilha) %>% count(especie) %>%
mutate(percent=n/sum(n) * 100)
ggplot(
perc_ilha,
aes(x = ilha, y = percent, fill = especie)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
geom_text(aes(label = sprintf("%.1f%%", percent)),
position=position_dodge(width = 0.9),
size=3.2, vjust= -0.4, color="black") +
scale_y_continuous(
expand = expansion (mult=c(0, 0.05))) +
labs(x="Ilha",
y="Percentual (%)",
fill= "Especie")+
theme_classic() + theme(legend.position = "bottom")
Conclusão: Enquanto a barra empilhada é melhor para proporção, o gráfico agrupado mostra de forma mais clara, por exemplo, que a proporção de Adelie na Ilha Dream (≈44.6%) é menor do que a proporção de Adelie na Ilha Torgersen (≈52.4%).
Conclusão Através do dataset “pinguins,” demonstramos quatro poderosas variações de gráficos de barras em ggplot2. A escolha entre os formatos vertical, horizontal, empilhado ou agrupado deve ser guiada pelo objetivo da análise e pela informação que se deseja comunicar de forma mais clara ao público.