Visualização de Dados com ggplot2
Hellen Sonaly Silva Alves
hellensilva.estat@gmail.com
http://lattes.cnpq.br/4845253626067527
Introdução
A visualização de dados é uma etapa fundamental no processo de análise estatística, pois permite explorar padrões, identificar relações, detectar outliers e comunicar resultados de forma clara e objetiva. Um gráfico bem construído facilita a interpretação das informações e contribui para uma tomada de decisão mais embasada.
No ambiente R, o pacote ggplot2 se destaca como uma das principais ferramentas para construção de gráficos, por ser baseado na Grammar of Graphics, uma abordagem estruturada que organiza a visualização em componentes como dados, mapeamentos estéticos, geometrias e escalas. Essa estrutura em camadas oferece grande flexibilidade e possibilita a criação de visualizações personalizadas e visualmente consistentes.
Neste tutorial, serão apresentados os conceitos fundamentais do ggplot2, desde a estrutura básica de um gráfico até recursos de facetas e customização.
Objetivo do Tutorial
Este tutorial tem como objetivo apresentar os fundamentos da visualização de dados utilizando o pacote ggplot2, explorando os principais conceitos da Grammar of Graphics e aplicando-os na construção de gráficos comuns (dispersão, linhas, barras e boxplots), além do uso de facetas, temas e boas práticas de visualização.
Pacotes e Dados
install.packages("ggplot2")
library(ggplot2)
Datasets utilizados:
- mtcars: dados sobre características de automóveis.
- diamonds: informações sobre preços e atributos de diamantes.
O que é a Grammar of Graphics
A Grammar of Graphics organiza um gráfico como uma composição. Em geral, construímos assim:
- Dados (
data): o conjunto de observações (linhas) e variáveis (colunas). - Mapeamento estético (
aes): quais variáveis serão representadas emx,y,color,fill, etc. - Geometria (
geom_*): como os dados serão desenhados (pontos, barras, linhas…). - Escalas (
scale_*): como valores viram elementos visuais (ex.: cores, limites de eixos). - Facetas (
facet_*): como dividir em painéis para comparar grupos. - Tema (
theme_*): aparência do gráfico (grades, fontes, etc.). - Rótulos (
labs): título, eixos, legenda e fonte.
No ggplot2, os gráficos são construídos adicionando
camadas com o operador +.
Estrutura básica do ggplot2
A forma mais comum:
ggplot()cria o “objeto gráfico” e define dados e mapeamentos.geom_*()define como os dados serão desenhados.- Funções como
labs(),theme_*()efacet_*()refinam apresentação e comparação.
Estéticas (aes): o que são e por que importam
As estéticas (aes) definem o “mapeamento” entre
variáveis e elementos visuais:
xey: posiçãocolor: cor do contorno (pontos/linhas)fill: preenchimento (barras, boxplot, áreas)size: tamanhoalpha: transparênciashape: forma do ponto
Exemplo: colorindo por categoria (cyl)
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3) +
labs(color = "Cilindros")- Agora os pontos são coloridos por número de cilindros.
- Isso ajuda a perceber se existe diferença entre os grupos (ex.:
carros de 8 cilindros podem concentrar-se em maior peso e menor
mpg). - O uso de
factor(cyl)faz a legenda tratarcylcomo categoria, não como número contínuo.
Principais geoms (com interpretação)
1) geom_point() – Gráfico de dispersão
Quando usar
- Para investigar relação entre duas variáveis numéricas.
- Para ver tendência (cresce/diminui), forma (linear/não linear), clusters e outliers.
Exemplo básico
Como interpretar
- Direção: se os pontos descem com o aumento de
wt, a relação é negativa. - Força: quanto mais “alinhados”, mais forte é a relação.
- Outliers: pontos muito distantes podem indicar carros atípicos.
Dispersão com linha de tendência (geom_smooth())
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE) +
labs(title = "Dispersão com tendência linear")- A linha representa a tendência estimada por um modelo linear.
- A faixa sombreada (
se = TRUE) representa uma incerteza (intervalo) em torno da estimativa. - Se a linha tem inclinação negativa, indica tendência de queda de
mpgcomwt.
Dica:
geom_smooth()não prova causalidade; ele descreve tendência.
2) geom_line() – Gráfico de linhas
Quando usar
- Para dados com ordem natural no eixo x (tempo, sequência, ranking).
- Em geral cada linha representa uma série.
Exemplo
df <- data.frame(
tempo = 1:10,
valor = c(2, 3, 5, 4, 6, 7, 8, 8, 9, 10)
)
ggplot(df, aes(tempo, valor)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
labs(x = "Tempo", y = "Valor", title = "Exemplo de gráfico de linha")- A linha conecta pontos em ordem de
tempo. - Aumentos e quedas indicam variação ao longo do eixo x.
- Os pontos ajudam a ver os valores observados (e não apenas a linha “passando”).
Observação importante:
geom_line()conecta os pontos na ordem do eixo x. Se seus dados estiverem “fora de ordem”, a linha pode ficar confusa.
3) geom_bar() vs geom_col() – Barras
Ideia geral
Gráficos de barras são usados para comparar quantidades por categoria.
geom_bar() (contagem automática)
Por padrão, geom_bar() usa stat = "count",
ou seja: ele conta quantas linhas existem em cada
categoria.
ggplot(mtcars, aes(x = factor(cyl))) +
geom_bar() +
labs(x = "Cilindros", y = "Frequência", title = "Contagem por categoria")- Cada barra é uma categoria de
cyl. - A altura da barra é o número de carros com aquele número de cilindros.
- É útil para ver distribuição de frequências.
geom_col() (valores já prontos)
Use quando você já tem um valor numérico por categoria (média, soma, proporção…).
media_mpg <- aggregate(mpg ~ cyl, data = mtcars, FUN = mean)
ggplot(media_mpg, aes(x = factor(cyl), y = mpg)) +
geom_col() +
labs(x = "Cilindros", y = "Média de mpg", title = "Média de mpg por cilindros")- A barra agora representa a média de mpg em cada grupo de cilindros.
- Diferenças entre barras sugerem diferenças de consumo médio.
Dica:
geom_bar()= conta linhas.geom_col()= usa valores que você fornece.
4) geom_boxplot() – Boxplot
Quando usar
- Para comparar distribuições de uma variável numérica entre grupos.
- Para enxergar dispersão, assimetria e possíveis outliers.
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
geom_boxplot() +
labs(x = "Cilindros", y = "mpg", title = "Distribuição de mpg por cilindros")Como interpretar o boxplot (peça por peça)
Para cada grupo:
- Linha no meio da caixa: mediana (50% abaixo, 50% acima).
- Caixa: vai do 1º quartil (Q1) ao 3º quartil
(Q3).
Isso é o intervalo interquartil (IQR), onde está o “miolo” dos dados. - Bigodes: vão até valores próximos aos extremos (até 1,5 × IQR).
- Pontos fora: possíveis outliers.
Se um grupo tem caixa mais alta, tende a ter mpg
maior.
Se a caixa é mais alta/estreita, indica maior/menor variabilidade.
Facetas: comparando grupos em painéis
Facetas dividem o gráfico em múltiplos painéis com a mesma estrutura
visual.
Isso facilita comparar padrões entre grupos sem misturar tudo no mesmo
painel.
facet_wrap() – vários painéis por uma variável
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
facet_wrap(~ factor(cyl)) +
labs(title = "Dispersão por número de cilindros")- Você tem um gráfico para cada grupo de cilindros.
- É útil para verificar se a relação
wtvsmpgmuda de um grupo para outro. - Como as escalas normalmente são iguais, comparar fica mais direto.
Dica: facetas são ótimas quando a sobreposição no mesmo painel atrapalha.
facet_grid() – grade (linhas e colunas)
ggplot(diamonds, aes(carat, price)) +
geom_point(alpha = 0.2) +
facet_grid(cut ~ color) +
labs(title = "Preço vs quilates por cut (linhas) e color (colunas)")- Cada painel corresponde a uma combinação de
cut(linha) ecolor(coluna). - Isso permite comparar como a relação entre quilates e preço varia entre essas combinações.
alpha = 0.2ajuda porque há muitos pontos no datasetdiamonds.
Observação: com muitas facetas, o gráfico pode ficar visualmente pesado. Use quando a comparação realmente for útil.
Temas e customização: deixando o gráfico mais “publicável”
Títulos, subtítulos e rótulos
ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
geom_point(size = 3) +
labs(
title = "Consumo vs Peso",
subtitle = "Comparação considerando o número de cilindros",
x = "Peso (wt)",
y = "Consumo (mpg)",
color = "Cilindros",
caption = "Fonte: dataset mtcars (R base)"
)titleesubtitlecontextualizam o que está sendo mostrado.captionindica fonte (importante em relatórios acadêmicos).- Rótulos claros tornam o gráfico interpretável sem explicação extra.
Temas prontos
Temas comuns:
theme_minimal()→ visual limpotheme_classic()→ sem grade de fundo, visual “clássico”theme_bw()→ fundo branco e grade padrãotheme_light()→ variação mais leve com grade
Boas práticas de visualização
- Escolha o gráfico de acordo com o tipo de variável e objetivo (comparar, relação, distribuição).
- Evite excesso de informação visual (muitas cores, muitas grades, textos longos).
- Use títulos e rótulos claros, eixos com unidades sempre que possível.
- Em datasets densos, controle sobreposição com
alpha,jitterou agregação. - Mantenha consistência de estilo em relatórios (mesmo tema, padrões de legenda).
Exercícios
- Crie um gráfico de dispersão de
hp(x) vsmpg(y), colorindo porcyl. - Faça um boxplot de
wtporgear. - Construa um gráfico de barras com a contagem de
gear. - Faça um scatter de
caratvspricenodiamonds, usandoalphae facetas porcut.
Gabarito sugerido
Conclusão
Neste tutorial, foram apresentados os fundamentos da visualização de dados com o pacote ggplot2, destacando os principais conceitos da Grammar of Graphics, a estrutura em camadas, o uso de estéticas, geometrias, facetas e customização por temas.
A interpretação correta dos gráficos é tão importante quanto sua construção: compreender o que cada elemento representa (pontos, linhas, caixas, barras) é essencial para tirar conclusões adequadas e comunicar resultados com clareza.
Com prática, o ggplot2 se torna uma ferramenta poderosa
para produzir visualizações consistentes e profissionais em relatórios,
artigos e apresentações.