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>
  1. Gráficos de Barras para Uma Variável Categórica (Frequência Simples) A análise univariada visa responder: Qual é a distribuição das espécies de pinguins na amostra?

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()

  1. Gráficos de Barras para Duas Variáveis Categóricas (Frequência Cruzada) Aqui, exploramos a relação entre a Espécie e a Ilha de coleta. O objetivo é visualizar como a composição de espécies varia entre as ilhas (Torgersen, Biscoe e Dream).

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.