O que é visualização de dados
A visualização de dados é o processo de transformar informações brutas em representações visuais — como gráficos, mapas, tabelas dinâmicas e diagramas — que facilitam a interpretação dos fenômenos estudados. Ao converter dados numéricos ou textuais em elementos visuais, torna-se mais intuitiva a identificação de padrões, tendências, comparações e anomalias que poderiam passar despercebidas em sua forma original.
Em um cenário em que grandes volumes de dados são produzidos continuamente, a visualização desempenha um papel central na análise e na comunicação de resultados. Ela permite que especialistas e não especialistas compreendam insights relevantes de forma rápida, apoia a tomada de decisões baseada em evidências e contribui tanto para análises exploratórias quanto para apresentações mais claras e impactantes.
Diversas ferramentas foram desenvolvidas para atender às diferentes necessidades de análise e comunicação visual, variando em complexidade, flexibilidade e público-alvo. Entre as mais utilizadas, destacam-se:
Apesar das diferenças, todas essas ferramentas têm como objetivo tornar os dados mais compreensíveis e úteis.
Entre essas ferramentas, o R se destaca pelo seu sistema gráfico extremamente flexível e poderoso, um diferencial importante em relação a softwares como SAS ou SPSS. No R é possível:
O ecossistema do R reúne diferentes abordagens e filosofias para construção de gráficos:
Sistema gráfico base (base R) – simples e poderoso.
lattice – voltado para visualizações multivariadas.
ggplot2 – baseado na Grammar of Graphics, referência moderna em visualização.
Neste tutorial, começaremos pelo sistema gráfico base, fundamental para compreender os demais.
O sistema gráfico base do R organiza suas funções em dois grandes grupos, que refletem maneiras distintas de construir visualizações.
São funções que criam gráficos completos, iniciando uma nova janela gráfica e substituindo qualquer gráfico anteriormente existente (a menos que se utilize parâmetros específicos). São ideais para começar uma visualização do zero.
Exemplos:
plot()hist()boxplot()barplot()Essas funções geram imediatamente uma representação gráfica completa, que depois pode ser modificada ou enriquecida.
São funções usadas para adicionar elementos a um gráfico já existente. Exemplos:
lines() — adiciona linhas.points() — adiciona pontos.text() — adiciona textos.title() — adiciona título.Permitindo personalização incremental gráficos já criados.
A função mais fundamental do sistema gráfico base é a plot().
Em sua forma mais simples, ela cria um gráfico de
dispersão:
A função plot() é a mais fundamental do sistema gráfico
base. Ela é genérica, ou seja, adapta-se ao tipo de objeto recebido,
chamando automaticamente o método apropriado.
x <- rnorm(50)
y <- rnorm(50)
plot(x, y)
plot()plot() é uma função genérica ela identifica o tipo de
objeto recebido e invoca o comportamwento automaticamente:
plot(xf) → se xf é um fator, cria um
gráfico de barras.plot(xf, y) → boxplot de y para cada nível
de xf.plot(x.df) → produz pares de gráficos entre todas as
variáveis numéricas do data frame.plot(myts) → gráfico de série temporal se o objeto é do
tipo ts.plot(xdate, yval) → eixo x formatado como
datas, se xdate para objeto Date.plot(f, low, up) → desenha a função f no
intervalo especificado.Ou seja, plot() adapta-se automaticamente ao tipo de
dado, tornando-se extremamente versátil.
A seguir são apresentados exemplos detalhados para fixar cada caso.
plot()
aplicado a fatores → gráfico de barras# Vetor fator
x <- factor(c("A", "B", "A", "C", "B", "A"))
# Gráfico gerado: barras por categoria
plot(x, main = "plot() aplicado a fator")
Descrição:
Quando o objeto passado é um fator (factor), o plot() automaticamente conta quantas vezes cada categoria aparece e cria um gráfico de barras com essas frequências.
plot(fator, numérico) → boxplot por categoriax <- factor(rep(c("Controle", "Tratamento"), each = 20))
x
## [1] Controle Controle Controle Controle Controle Controle
## [7] Controle Controle Controle Controle Controle Controle
## [13] Controle Controle Controle Controle Controle Controle
## [19] Controle Controle Tratamento Tratamento Tratamento Tratamento
## [25] Tratamento Tratamento Tratamento Tratamento Tratamento Tratamento
## [31] Tratamento Tratamento Tratamento Tratamento Tratamento Tratamento
## [37] Tratamento Tratamento Tratamento Tratamento
## Levels: Controle Tratamento
y <- c(rnorm(20, 5, 1), rnorm(20, 8, 1.2))
y
## [1] 5.472942 2.563206 5.458663 5.247438 5.760756 5.724486 4.588139
## [8] 4.169075 4.831486 4.915217 4.547347 5.577040 6.224563 6.086792
## [15] 5.361529 5.153700 5.028155 6.054739 4.321677 4.285858 8.591143
## [22] 9.167216 6.245244 8.470413 8.448507 7.252416 11.415655 6.895760
## [29] 7.906697 6.393172 8.486069 8.365014 9.956995 9.585205 7.528987
## [36] 9.496525 5.652650 10.403174 7.827366 7.209976
plot(x, y,
main = "Boxplot gerado por plot(fator, numérico)",
xlab = "Grupos", ylab = "Valores")
Descrição:
Quando o primeiro argumento é um fator e o segundo é
um vetor numérico, plot() gera automaticamente
boxplots para cada nível do fator, comparando os
grupos. Cada categoria vira uma caixa.
plot(data.frame) → matriz de gráficos (scatterplot
matrix)df <- data.frame(
x = rnorm(50),
y = rnorm(50),
z = rnorm(50)
)
plot(df, main = "plot(data.frame): matriz de dispersão")
x1 <- factor(rep(c("Controle", "Tratamento"), each = 20))
y1 <- c(rnorm(20, 5, 1), rnorm(20, 8, 1.2))
df <- data.frame(
x1 = x1,
y1 = y1,
Z1 = rnorm(20)
)
plot(df, main = "plot(data.frame): matriz de dispersão")
Descrição:
Quando recebe um data.frame só com colunas numéricas,
plot() produz uma matriz de gráficos de
dispersão, comparando cada variável contra as demais. É útil
para ver correlações e relações gerais entre variáveis.
plot(ts) → série temporalts_data <- ts(rnorm(100), frequency = 12, start = c(2020, 1))
plot(ts_data,
main = "plot(ts): Série Temporal",
ylab = "Valor", xlab = "Tempo")
Descrição:
Quando o objeto é uma série temporal (ts),
plot() usa automaticamente umgráfico de
linha, respeitando frequência, ano e mês do objeto. Ideal para
visualizar tendências e variações ao longo do tempo.
plot(Date, numeric) → eixo de datas automaticamente
formatado# Sequência de datas
dias <- as.Date("2023-01-01") + 0:29
dias
## [1] "2023-01-01" "2023-01-02" "2023-01-03" "2023-01-04" "2023-01-05"
## [6] "2023-01-06" "2023-01-07" "2023-01-08" "2023-01-09" "2023-01-10"
## [11] "2023-01-11" "2023-01-12" "2023-01-13" "2023-01-14" "2023-01-15"
## [16] "2023-01-16" "2023-01-17" "2023-01-18" "2023-01-19" "2023-01-20"
## [21] "2023-01-21" "2023-01-22" "2023-01-23" "2023-01-24" "2023-01-25"
## [26] "2023-01-26" "2023-01-27" "2023-01-28" "2023-01-29" "2023-01-30"
vari <- rnorm(30)
vari
## [1] 1.00480154 -0.19554583 -1.24025258 -0.63493382 0.12462371 2.74609273
## [7] 2.85867133 0.56825298 -1.94066511 -1.86772528 -1.60434969 0.02353332
## [13] 1.09212268 0.05024415 0.55670423 1.17212908 0.07258945 -1.00675279
## [19] -1.25877073 0.83727880 0.95582024 2.01996710 -0.44278529 0.69196671
## [25] 1.23243460 0.21166537 -0.01673592 -1.30035019 -0.28642828 -0.01274271
valores <- cumsum(vari)
valores
## [1] 1.0048015 0.8092557 -0.4309969 -1.0659307 -0.9413070 1.8047857
## [7] 4.6634571 5.2317101 3.2910449 1.4233197 -0.1810300 -0.1574967
## [13] 0.9346260 0.9848701 1.5415744 2.7137034 2.7862929 1.7795401
## [19] 0.5207694 1.3580482 2.3138684 4.3338355 3.8910502 4.5830169
## [25] 5.8154515 6.0271169 6.0103810 4.7100308 4.4236025 4.4108598
plot(dias, valores, type = "l",
main = "plot(Date, numeric)",
xlab = "Data", ylab = "Valor")
Descrição:
Quando o eixo X contém objetos Date, o plot() formata o eixo automaticamente como datas e produz normalmente um gráfico de dispersão ou linha. Aqui usamos type=“l” para uma linha da evolução diária.
plot(POSIXct, numeric) → datas com horas e minutostempo <- as.POSIXct("2023-01-01 00:00:00") + 0:23 * 3600
tempo
## [1] "2023-01-01 00:00:00 -03" "2023-01-01 01:00:00 -03"
## [3] "2023-01-01 02:00:00 -03" "2023-01-01 03:00:00 -03"
## [5] "2023-01-01 04:00:00 -03" "2023-01-01 05:00:00 -03"
## [7] "2023-01-01 06:00:00 -03" "2023-01-01 07:00:00 -03"
## [9] "2023-01-01 08:00:00 -03" "2023-01-01 09:00:00 -03"
## [11] "2023-01-01 10:00:00 -03" "2023-01-01 11:00:00 -03"
## [13] "2023-01-01 12:00:00 -03" "2023-01-01 13:00:00 -03"
## [15] "2023-01-01 14:00:00 -03" "2023-01-01 15:00:00 -03"
## [17] "2023-01-01 16:00:00 -03" "2023-01-01 17:00:00 -03"
## [19] "2023-01-01 18:00:00 -03" "2023-01-01 19:00:00 -03"
## [21] "2023-01-01 20:00:00 -03" "2023-01-01 21:00:00 -03"
## [23] "2023-01-01 22:00:00 -03" "2023-01-01 23:00:00 -03"
temperatura <- 20 + rnorm(24)
temperatura
## [1] 20.42110 20.80313 20.28239 19.73482 21.44806 18.16914 20.54214 19.18215
## [9] 20.26510 19.80899 18.95355 19.87606 19.97035 19.34514 20.53086 18.19484
## [17] 19.96715 19.05419 20.78874 19.78993 20.13138 18.84905 20.55929 20.65393
plot(tempo, temperatura, type = "o",
main = "plot(POSIXct, numeric)",
xlab = "Horário", ylab = "Temperatura (°C)")
Descrição:
Com objetos POSIXct, o eixo X mostra data e hora. É ideal para visualizar dados de alta frequência (horas, minutos). type=“o” plota pontos conectados por linhas.
plot(function, min, max) → gráfico de função
matemáticaplot(sin, 0, 2*pi,
main = "plot(função, início, fim)",
ylab = "sin(x)", xlab = "x")
Descrição:
Quando plot() recebe uma função + intervalo, ele avalia a função em vários pontos automaticamente e traça uma curva matemática. Aqui ele desenha o gráfico do seno de 0 a \(2\pi\).
O R possui diversas funções prontas para explorar a distribuição de
um vetor numérico.
Supondo:
Funções importantes:
hist(x) → histogramaqqnorm(x) → gráfico Q-Q normalqqplot(x, y) → comparação Q-Q entre dois vetoresboxplot(x) → boxplotx <- rnorm(100)
y <- rt(100, df = 3)
par(mfrow = c(2,2))
hist(x, col = 2)
qqnorm(x)
qqplot(x, y)
boxplot(x, col = "green")
library(rpart)
head(car90[,1:7])
## Country Disp Disp2 Eng.Rev Front.Hd Frt.Leg.Room Frt.Shld
## Acura Integra Japan 112 1.8 2935 3.5 41.5 53.0
## Acura Legend Japan 163 2.7 2505 2.0 41.5 55.5
## Audi 100 Germany 141 2.3 2775 2.5 41.5 56.5
## Audi 80 Germany 121 2.0 2835 4.0 42.0 52.5
## BMW 325i Germany 152 2.5 2625 2.0 42.0 52.0
## BMW 535i Germany 209 3.5 2285 3.0 42.0 54.5
pie(table(car90$Country))
barplot(table(car90$Type))
O que está sendo feito
pie(table(car90$Country)) → Gráfico de setores das
origens dos carros.
table(car90$Country) conta quantos carros há
em cada país de origem.pie() usa essas frequências e cria um gráfico de pizza,
mostrando a proporção de carros por país.barplot(table(car90$Type)) → Gráfico de barras do
tipo de carros
table(car90$Type) conta quantos carros há em cada
tipo (Sedan, Sporty, Wagon etc.).
barplot() transforma essas contagens em barras,
facilitando a comparação entre categorias.
Diferente do pie, o barplot destaca melhor diferenças absolutas.
barplot()Quando o argumento é uma matriz, barplot() pode criar
gráficos agrupados ou empilhados.
1. Criação da tabela de contingência
tab <- table(car90$Country, car90$Type)
A função table() cruza duas variáveis fator do
dataset:
car90$Country → país de origem do carro
car90$Type → tipo do carro
O resultado é uma matriz de frequências, em que:
linhas = países
colunas = tipos de carro
Cada célula mostra quantos carros de um país correspondem a um determinado tipo.
Exemplo:
tab <- table(car90$Country, car90$Type)
barplot(
tab,
beside = TRUE,
legend.text = TRUE
)
2. Geração do gráfico de barras agrupadas
barplot(tab, beside = TRUE, legend.text = TRUE)
O que cada argumento faz
beside = TRUE
Informa ao R para não empilhar as barras. Cada categoria de Type aparece lado a lado dentro de cada país. Isso cria um gráfico de barras agrupadas, ideal para comparar grupos.
legend.text = TRUE
Faz o R adicionar automaticamente uma legenda, indicando o significado de cada cor (cada tipo de carro).
Interpretação do gráfico:
Cada grupo de barras corresponde a um país.
Dentro de cada país, há várias barras lado a lado, cada uma representando um tipo de carro.
As alturas das barras mostram quantos carros daquele país pertencem a cada tipo.
Para explorar relações multidimensionais, o R oferece diversas funções:
par(mfrow = c(2,2))
# Imagem 2D
myf <- function(x,y) sin(x) + cos(y)
x <- y <- seq(0, 2*pi, len = 25)
z <- outer(x, y, myf)
image(z, axes = FALSE, main = "A matemática pode ser bonita ...")
# Dotchart
dotchart(t(VADeaths), xlim = c(0,100), cex = 0.6)
# Symbols
symbols(
airquality$Temp, airquality$Wind,
thermometers = cbind(0.07, 0.3, airquality$Ozone / max(airquality$Ozone, na.rm=TRUE)),
inches = 0.15
)
# Gráfico 3D
persp(x, y, z, theta = 45, phi = 45, shade = 0.2)
plot()Argumentos que controlam desde os dados até a aparência do gráfico da
função plot().
plot(x, y, type = "p", main = NULL, xlab = NULL, ylab = NULL, ...)
x, y: vetores numéricos ou fatores
representando os dados do eixo X e Y.type: tipo de gráfico, como pontos, linhas ou
ambos.main: título principal.xlab, ylab: rótulos dos eixos X e Y.…: argumentos adicionais que podem ser passados para
personalizar pontos, linhas ou texto.1. Argumentos principais e adicionais
| Argumento | Descrição | Valor padrão | Valores possíveis / exemplos |
|---|---|---|---|
x |
Dados do eixo X | - (obrigatório) | Vetor numérico ou fator |
y |
Dados do eixo Y | NULL | Vetor numérico ou fator |
type |
Tipo de gráfico | "p" |
"p" (pontos), "l" (linha),
"b" (pontos+linha), "o" (overplotted),
"h" (histogram-like), "s" (steps),
"n" (nenhum) |
main |
Título principal | "" |
String |
sub |
Subtítulo | "" |
String |
xlab |
Label do eixo X | Nome de x |
String |
ylab |
Label do eixo Y | Nome de y |
String |
xlim |
Limites do eixo X | Calculados automaticamente | Vetor c(min, max) |
ylim |
Limites do eixo Y | Calculados automaticamente | Vetor c(min, max) |
col |
Cor de pontos/linhas | "black" |
Nome de cor, hexadecimal ou número |
pch |
Símbolo dos pontos | 1 |
0-25 (símbolos predefinidos) |
lty |
Tipo de linha | 1 |
1=contínua, 2=tracejada, 3=pontilhada, 4, 5, 6 |
lwd |
Espessura da linha | 1 |
Numérico positivo |
asp |
Aspect ratio (proporção Y/X) | NA |
Numérico ou NA |
axes |
Se os eixos devem ser desenhados | TRUE |
TRUE / FALSE |
frame.plot |
Se o retângulo ao redor do gráfico deve ser desenhado | axes |
TRUE / FALSE |
ann |
Se títulos e labels devem ser adicionados | TRUE |
TRUE / FALSE |
bg |
Cor de fundo de símbolos (pch 21-25) | NA |
Nome de cor, hexadecimal |
cex |
Tamanho relativo de símbolos ou texto | 1 |
Numérico positivo |
cex.axis |
Tamanho dos labels dos eixos | 1 |
Numérico positivo |
cex.lab |
Tamanho dos labels dos eixos | 1 |
Numérico positivo |
cex.main |
Tamanho do título principal | 1.2 |
Numérico positivo |
cex.sub |
Tamanho do subtítulo | 1 |
Numérico positivo |
font.main |
Fonte do título | 1 |
1=normal, 2=negrito, 3=itálico, 4=negrito+itálico |
font.lab |
Fonte dos labels dos eixos | 1 |
1=normal, 2=negrito, 3=itálico, 4=negrito+itálico |
font.axis |
Fonte dos ticks dos eixos | 1 |
1=normal, 2=negrito, 3=itálico, 4=negrito+itálico |
las |
Orientação dos ticks dos eixos | 0 |
0=paralelo, 1=horizontal, 2=perpendicular, 3=vertical |
log |
Transformação logarítmica dos eixos | "" |
"x", "y", "xy" |
xaxs, yaxs |
Tipo de expansão dos eixos | "r" |
"r" (regular, 4% extra), "i" (exato) |
panel.first |
Função executada antes da plotagem do painel | NULL |
Função R |
panel.last |
Função executada após a plotagem do painel | NULL |
Função R |
2. Exemplo de uso com personalização completa
x <- 1:5
y <- c(10, 20, 30, 40, 50)
plot(x, y,
type = "b", # pontos + linhas
main = "Exemplo de Gráfico",
cex.main = 2,
sub = "Gráfico",
cex.sub = 1.5,
xlab = "Eixo X",
ylab = "Eixo Y",
col = 21,
pch = 19,
cex = 1.5,
xaxs = "r", # limites exatos no eixo X
yaxs = "r") # limites exatos no eixo Y
# Desenhar apenas os valores existentes nos eixos
axis(1, at = x)
axis(2, at = y)
x <- 1:5
y <- c(10, 20, 30, 40, 50)
plot(x, y,
type = "b", # pontos + linhas
main = "Exemplo de Gráfico",
xlab = "Eixo X",
ylab = "Eixo Y",
col = "blue",
pch = 19,
cex = 1.5,
xaxs = "i", # limites exatos no eixo X
yaxs = "i") # limites exatos no eixo Y
# Desenhar apenas os valores existentes nos eixos
axis(1, at = x)
axis(2, at = y)
✅ Neste exemplo:
type = "b" → combina pontos e linhas.pch = 19 → ponto sólido.xaxs = "i" e yaxs = "i" → limites do
gráfico exatamente os valores dos dados, sem
expansão.axis() → personaliza os ticks para mostrar apenas os
valores reais dos dados.par()A função par() permite configurar parâmetros gráficos
globais que afetam a aparência de gráficos criados posteriormente.
| Parâmetro | Descrição | Valor padrão / Exemplo |
|---|---|---|
mfrow |
Define múltiplos gráficos organizados em linhas x colunas | c(1,1) Ex.: mfrow = c(2,2) |
mfcol |
Como mfrow, mas preenche por
coluna |
c(1,1) Ex.: mfcol = c(2,2) |
oma |
Margens externas (outer margins), em linhas de texto | oma = c(0,0,0,0) Ex.: oma = c(2,2,2,2) |
mar |
Margens internas (bottom, left, top, right), em linhas de texto | mar = c(5,4,4,2) + 0.1 |
mai |
Margens internas em polegadas | mai = c(1,1,1,0.5) |
pty |
Proporção do plot ("m" = máximo, "s" =
quadrado) |
"m" |
xaxs, yaxs |
Expansão dos eixos | "r" (default), "i" (exato) |
las |
Orientação dos ticks dos eixos | 0 = paralelo ao eixo 1 = horizontal 2 = perpendicular 3 = vertical |
cex |
Tamanho relativo de símbolos ou textos | Numérico positivo |
mgp |
Distâncias dos elementos dos eixos: título, rótulos, linha do eixo | mgp = c(3, 1, 0) (padrão)Ex.: mgp = c(2, 0.7, 0) |
Exemplos de Uso
plot(1:5, 1:5, main = "Gráfico com margens ajustadas")
par(mar = c(2,2,2,2) + 0.1)
plot(1:5, 1:5, main = "Gráfico com margens ajustadas")
par(mar = c(2,0,0,0))
plot(1:5, 1:5, main = "Gráfico com margens ajustadas")
par(mar = c(4,5,1,1))
plot(1:5, 1:5, main = "Gráfico com margens ajustadas")
par(oma = c(2,2,2,2))
plot(1:5, 1:5)
mtext("Título externo", outer = TRUE, cex = 1.5)
par(oma = c(0,0,0,0))
plot(1:5, 1:5)
mtext("Título externo", outer = TRUE, cex = 1.5)
No sistema base do R, o layout de múltiplos gráficos em uma mesma janela é configurado principalmente por três funções:
par(mfrow = )
par(mfcol = )
layout()
A função par() pode ser usada para exibir múltiplos
gráficos em uma mesma janela por meio dos argumentos mfrow ou mfcol.
Nesse caso, cria-se uma grade simples em que todos os painéis possuem o
mesmo tamanho. Já a função layout() permite construir
arranjos mais complexos, nos quais os gráficos podem ter diferentes
tamanhos e proporções, oferecendo controle total sobre a área de
plotagem.
par()par(mfrow = c(2,2))
plot(factor(sample(letters[1:3], 50, TRUE)),
main = "Fator → Barras")
plot(factor(rep(1:2, each = 30)), rnorm(60),
main = "Fator + Numérico → Boxplot")
plot(data.frame(a = rnorm(50), b = rnorm(50)),
main = "Data Frame → Matriz de Dispersão")
plot(sin, -pi, pi,
main = "Função → Curva")
par(mfrow = c(2, 2)) # 2 linhas x 2 colunas
plot(1:5, 1:5, main = "Gráfico 1")
plot(1:5, 5:1, main = "Gráfico 2")
plot(1:5, c(2,3,5,7,11), main = "Gráfico 3")
plot(1:5, c(11,7,5,3,2), main = "Gráfico 4")
par(mfrow = c(2, 2),oma = c(2,2,2,2)) # 2 linhas x 2 colunas
plot(1:5, 1:5, main = "Gráfico 1")
plot(1:5, 5:1, main = "Gráfico 2")
plot(1:5, c(2,3,5,7,11), main = "Gráfico 3")
plot(1:5, c(11,7,5,3,2), main = "Gráfico 4")
par(mfrow = c(2, 2),oma = c(0,0,0,0),mar=c(0,0,0,0)) # 2 linhas x 2 colunas
plot(1:5, 1:5, main = "Gráfico 1")
plot(1:5, 5:1, main = "Gráfico 2")
plot(1:5, c(2,3,5,7,11), main = "Gráfico 3")
plot(1:5, c(11,7,5,3,2), main = "Gráfico 4")
par(mfrow = c(2, 2),oma = c(2,2,2,2),mar=c(2,2,2,2)) # 2 linhas x 2 colunas
plot(1:5, 1:5, main = "Gráfico 1")
plot(1:5, 5:1, main = "Gráfico 2")
plot(1:5, c(2,3,5,7,11), main = "Gráfico 3")
plot(1:5, c(11,7,5,3,2), main = "Gráfico 4")
par(mfrow = c(2, 2),oma = c(0,1,0,1),mar=c(2.3,2.9,1.5,0),mgp=c(1.3,0.5,0)) # 2 linhas x 2 colunas
plot(1:5, 1:5, main = "Gráfico 1")
plot(1:5, 5:1, main = "Gráfico 2")
plot(1:5, c(2,3,5,7,11), main = "Gráfico 3")
plot(1:5, c(11,7,5,3,2), main = "Gráfico 4")
layout()| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
matrix |
Define o arranjo dos painéis (posição dos gráficos) | layout(mat, heights = c(1, 2)) |
heights |
Controla alturas relativas das linhas de painéis | par(oma = c(2,2,2,2)) |
widths |
Controla larguras relativas das colunas de painéis | layout(mat, widths = c(3, 1))` |
mat <- matrix(c(1, 2), nrow = 1)
layout(mat,
widths = c(3, 1))
plot(cars, main = "Gráfico Largo")
plot(pressure, main = "Gráfico Estreito")
layout.matrix <- matrix(c(2, 1, 0, 3), nrow = 2, ncol = 2)
layout(mat = layout.matrix,
heights = c(1, 2), # Altura das linhas
widths = c(2, 2)) # largura das duas columas
layout.show(3)
# Configurando o layout do plot
layout(mat = matrix(c(2, 1, 0, 3),
nrow = 2,
ncol = 2),
heights = c(1, 2), # Altura das duas linhas
widths = c(2, 1)) # largura das duas colunas
# Plot 1: Scatterplot
par(mar = c(5, 4, 0, 0))
plot(x = mtcars$mpg,
y = mtcars$hp,
xlab = "height",
ylab = "weight",
pch = 16)
# Plot 2: Em cima (height) boxplot
par(mar = c(0, 4, 0, 0))
boxplot(mtcars$mpg, xaxt = "n",
yaxt = "n", bty = "n", yaxt = "n",
col = "white", frame = FALSE, horizontal = TRUE)
## Aviso em (function (z, notch = FALSE, width = NULL, varwidth = FALSE, : Argumento duplicado yaxt = "n" foi ignorado
# Plot 3: À direita (boxplot do peso)
par(mar = c(5, 0, 0, 0))
boxplot(mtcars$hp, xaxt = "n",
yaxt = "n", bty = "n", yaxt = "n",
col = "white", frame = F)
## Aviso em (function (z, notch = FALSE, width = NULL, varwidth = FALSE, : O argumento duplicado yaxt = "n" foi desconsiderado
Em R0, gráficos podem ser salvos em arquivos usando
png(), jpeg(), pdf(),
tiff() ou svg().
dev.off().| Função | Parâmetro | Descrição | Valor Padrão / Exemplo |
|---|---|---|---|
png() |
filename |
Nome do arquivo de saída | "Rplot%03d.png" |
width |
Largura do gráfico | 480 (pixels) | |
height |
Altura do gráfico | 480 (pixels) | |
units |
Unidade de medida para width e height | "px" |
|
res |
Resolução em DPI | 72 | |
jpeg() |
filename |
Nome do arquivo | "Rplot%03d.jpeg" |
width |
Largura | 480 | |
height |
Altura | 480 | |
units |
Unidade de medida | "px" |
|
quality |
Qualidade da compressão (0-100) | 75 | |
res |
Resolução em DPI | 72 | |
pdf() |
file |
Nome do arquivo | "Rplots.pdf" |
width |
Largura em polegadas | 7 | |
height |
Altura em polegadas | 7 | |
tiff() |
filename |
Nome do arquivo | "Rplot%03d.tiff" |
width |
Largura | 480 | |
height |
Altura | 480 | |
units |
Unidade de medida | "px" |
|
res |
Resolução em DPI | 72 | |
compression |
Tipo de compressão | "none" |
|
svg() |
filename |
Nome do arquivo | "Rplot%03d.svg" |
width |
Largura | 7 | |
height |
Altura | 7 |
Exemplos de Exportação
png("grafico.png", width = 800, height = 600, res = 120)
plot(1:10, (1:10)^2, main = "Gráfico PNG")
dev.off()
## png
## 2
pdf("grafico.pdf", width = 7, height = 5)
plot(1:10, (1:10)^2, main = "Gráfico PDF")
dev.off()
## png
## 2
jpeg("grafico.jpeg", width = 800, height = 600, quality = 90)
plot(1:10, (1:10)^2, main = "Gráfico JPEG")
dev.off()
## png
## 2
dev.off() para finalizar o arquivo.width, height e res
para gráficos em alta resolução.par(mfrow=…).No R, você pode usar a função expression() para
adicionar símbolos matemáticos, letras gregas, expoentes,
subscritos e operadores em títulos, labels e textos dentro de
gráficos.
| Letra | Código em expression() |
|---|---|
| α | expression(alpha) |
| β | expression(beta) |
| γ | expression(gamma) |
| δ | expression(delta) |
| θ | expression(theta) |
| λ | expression(lambda) |
| μ | expression(mu) |
| σ | expression(sigma) |
| π | expression(pi) |
x <- 1:5
y <- x^2
# Letras gregas nos títulos e labels
plot(x, y,
main = expression(alpha + " versus " + beta),
xlab = expression(theta[gamma]),
ylab = expression(sigma^2))
# Adicionando texto dentro do gráfico
text(3, 10, expression(mu == 5))
✅ Observações:
expression() permite combinar texto
normal com símbolos matemáticos.
É possível usar expoentes, subscritos e operadores matemáticos, por exemplo:
sigma^2 → σ²theta[i] → θᵢsqrt(x) → √xalpha + beta → α + βx e
y:set.seed(123)
x <- rnorm(50)
y <- rnorm(50)
plot(x, y)
plot(x, y, type = "b", pch = 19, col = "blue",
main = "Gráfico Personalizado",
xlab = "Eixo X", ylab = "Eixo Y")
plot(x, y, xlim = c(0,1), ylim = c(0,1))
par(mfrow=c(2,2))
plot(x,y,type="p", main="p")
plot(x,y,type="l", main="l")
plot(x,y,type="b", main="b")
plot(x,y,type="o", main="o")
par(mfrow=c(1,1))
x2 <- runif(50, 1, 100)
y2 <- runif(50, 1, 100)
plot(x2, y2, log = "xy")
plot()plot() com fatoresf <- factor(sample(c("A","B","C"), 40, replace = TRUE))
plot(f)
grupo <- factor(sample(c("G1","G2","G3"), 60, replace = TRUE))
valores <- rnorm(60)
plot(grupo, valores)
plot(data.frame)df <- data.frame(a=rnorm(50), b=rnorm(50), c=rnorm(50))
plot(df)
plot(ts)serie <- ts(rnorm(120), frequency = 12, start = c(2021,1))
plot(serie)
datas <- seq.Date(from=as.Date("2020-01-01"), by="day", length.out=50)
val <- rnorm(50)
plot(datas, val, type="l")
horas <- seq.POSIXt(from=as.POSIXct("2020-01-01 00:00"),
by="hour", length.out=50)
plot(horas, rnorm(50), type="l")
x <- rnorm(1000)
hist(x, breaks = 20, col = "lightblue")
qqnorm(x)
qqline(x)
boxplot(x, col = "orange")
x1 <- rnorm(100)
y1 <- rt(100, 3)
qqplot(x1, y1)
barplot()car90 <- data.frame(
Type = sample(c("Sedan","SUV","Truck"), 100, replace=TRUE),
Country = sample(c("USA","Japan","Germany"), 100, replace=TRUE)
)
barplot(table(car90$Type))
barplot(table(car90$Country, car90$Type),
beside = TRUE, legend = TRUE)
barplot(table(car90$Country, car90$Type),
beside = FALSE, legend = TRUE)
par()par(mar = c(5,4,4,2))
plot(1:10)
par(mar = c(2,2,2,2))
plot(1:10)
par(mfrow=c(2,2))
hist(rnorm(100))
plot(rnorm(50), rnorm(50))
boxplot(rnorm(100))
plot(sin(seq(0,2*pi,length=100)))
par(mfrow=c(1,1))
par(mfrow=c(2,2), oma=c(2,2,2,2))
plot(rnorm(50))
plot(rnorm(50))
plot(rnorm(50))
plot(rnorm(50))
mtext("Título Geral", outer=TRUE, cex=1.5)
par(mfrow=c(1,1))
png("meugrafico.png", width=800, height=600)
#plot(x, y)
dev.off()
## png
## 2
pdf("meugrafico.pdf")
#plot(x, y)
dev.off()
## png
## 2
pdf("multiplos.pdf")
plot(rnorm(50))
hist(rnorm(200))
boxplot(rnorm(100))
dev.off()
## png
## 2
png("alta_res.png", res=300, width=2000, height=1500)
plot(rnorm(100), rnorm(100))
dev.off()
## png
## 2
# 1. Vetores
a <- rnorm(100)
b <- rnorm(100)
c <- rnorm(100)
# 2. Data frame
df2 <- data.frame(a, b, c)
# 3. Matriz gráfica
plot(df2)
# 4. Layout 2x2
png("painel_final.png", width=1200, height=900)
par(mfrow=c(2,2), oma=c(2,2,2,2))
plot(a,b)
hist(a)
boxplot(b)
plot(sin(seq(0,2*pi,length=100)), type="l")
# 5. Título externo
mtext("Painel Final – Exercício Integrado", outer=TRUE, cex=1.5)
dev.off()
## png
## 2
par(mfrow=c(1,1))
ggplot2O ggplot2 (ou simplesmente ggplot) é um
pacote da linguagem R voltado para a visualização e construção de
gráficos. Ele é um dos pacotes mais populares para essa finalidade,
principalmente devido à sua flexibilidade. O pacote foi desenvolvido por
Hadley Wickham, criador de outros pacotes importantes do
Tidyverse, como tidyr e
dplyr.
Antes de iniciar a utilização do ggplot2, criaremos duas
bases de dados que serão usadas ao longo do capítulo:
df_2007 (dados de países),
usa uma versão adaptada do dataset Gapminder:library(gapminder)
library(dplyr)
df_2007 <- gapminder %>%
filter(year == 2007) %>% # Último ano disponível
mutate(
log_gdp_per_capita = log(gdpPercap),
life_expec = lifeExp,
continent = continent,
populacao = pop # Mantemos o nome usado no texto
)
head(df_2007)
## # A tibble: 6 × 9
## country continent year lifeExp pop gdpPercap log_gdp_per_capita life_expec
## <fct> <fct> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Afghan… Asia 2007 43.8 3.19e7 975. 6.88 43.8
## 2 Albania Europe 2007 76.4 3.60e6 5937. 8.69 76.4
## 3 Algeria Africa 2007 72.3 3.33e7 6223. 8.74 72.3
## 4 Angola Africa 2007 42.7 1.24e7 4797. 8.48 42.7
## 5 Argent… Americas 2007 75.3 4.03e7 12779. 9.46 75.3
## 6 Austra… Oceania 2007 81.2 2.04e7 34435. 10.4 81.2
## # ℹ 1 more variable: populacao <int>
df_feliz <- df_2007 %>%
group_by(continent) %>%
summarise(
populacao = sum(populacao),
life_expec = mean(life_expec),
gdp_media = mean(log_gdp_per_capita),
year = first(year),
.groups = "drop"
)
head(df_feliz)
## # A tibble: 5 × 5
## continent populacao life_expec gdp_media year
## <fct> <dbl> <dbl> <dbl> <int>
## 1 Africa 929539692 54.8 7.49 2007
## 2 Americas 898871184 73.6 9.02 2007
## 3 Asia 3811953827 70.7 8.74 2007
## 4 Europe 586098529 77.6 9.99 2007
## 5 Oceania 24549947 80.7 10.3 2007
A principal característica do ggplot2 é sua formulação
baseada na teoria The Grammar of Graphics (A Gramática dos
Gráficos), de Wilkinson (2005).
Essa teoria propõe que todo gráfico estatístico pode ser descrito
como a combinação de componentes (ou camadas). Em vez de usar funções
específicas para cada tipo de gráfico, o ggplot2 permite
que você construa visualizações adicionando essas camadas
progressivamente.
As camadas essenciais são:
<DATA>)aes())geom_)Outros componentes incluem transformações estatísticas, sistemas de coordenadas, facets, cores e temas.
ggplot2 e outros sistemas de plotagemA linguagem R possui um sistema gráfico robusto nativo (base R) e
pacotes como lattice. Ainda assim, o ggplot2
se destaca pela flexibilidade gerada pelo conceito de camadas. A
gramática dos gráficos permite que o usuário adapte o gráfico às suas
necessidades, criando desde visualizações simples até muito
complexas.
ggplot2A estrutura básica é:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(mapping = aes(<MAPPINGS>)) +
...
A primeira camada (layer) necessária para a criação de gráficos no
ggplot2 é dada pelo comando ggplot(dados).
Neste comando, estamos criando a área onde o gráfico será construído e,
ainda, informando ao ggplot2 qual o conjunto de dados que
contém essas variáveis.
ggplot(data = df_2007)
Observe que aparece apenas uma área (em cinza) e é nesta àrea onde
será construído o gráfico. Nela ainda não contém nenhum formato
geométrico como, por exemplo, pontos, barras, caixas, etc. Para isso
precisa-se informar ao ggplot2 qual o formato geométrico
(geom_tipo) que será usado no gráfico. Além disso, precisa
informar também qual a estética (aes(x,y,cores, …)) que
quer dar ao gráfico: variável do eixo x, variável do eixo
y, cores, etc. O operador
+ conecta as camadas do gráfico.
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg))
As variáveis significam: disp cilindradas e
mpg significa milhas por galão.
ggplot(mtcars,mapping = aes(x= disp, y=mpg)) +
geom_point()
Observe que no gráfico não foi ainda definida cor para os pontos, e
também os eixos não foram rotulados. Agora propondo modificações, como
definir uma cor fixa, aumentento dos pontos e adicionar transparência
(alpha) e rotulos para os eixos.
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg), color=c("red"))
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg), color=c("red"))+
labs(x="Cilindradas", y="Milhas/galão")
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg), color=c("red"), alpha =0.2)+
labs(x="Cilindradas", y="Milhas/galão")
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg, color=as.factor(am), shape = as.factor(am)), size = 5) +
labs(x="Cilindradas", y="Milhas/galão")
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg, color=as.factor(am)), shape = "\U0001F694", size = 5) +
labs(x="Cilindradas", y="Milhas/galão")
ggplot(mtcars) +
geom_point(mapping = aes(x= disp, y=mpg, color=as.factor(am)), shape = "\U0001F694", size = 5) +
labs(x="Cilindradas", y="Milhas/galão", color = 'População')
Com esse tipo de modificações o gráfico fica visualmente mais informativo e agradável, mantendo a mesma estrutura da gramática dos gráficos já apresentada.
aes())Nesta seção mostramos como o mapeamento estético aes()
conecta variáveis as propriedades visuais do gráfico. Os exemplos
ilustram o uso global e local de mapeamentos, além da aplicação de
múltiplas estéticas simultaneamente.
x, y)color)size)fill)alpha)label)Regras importantes:
ggplot() → global.geom_() → local.aes().Exemplo 1: — Dispersão colorida por continente
g <- ggplot(df_2007) +
geom_point(aes(x = log_gdp_per_capita,
y = life_expec,
color = continent),
size = 3)
g
O que está sendo feito:
Foi criado um gráfico de dispersão relacionando a variável
log_gdp_per_capita e life_expec.
A cor dos pontos representa os continentes, graças ao mapeamento estético dentro de `aes(color = continent).
Como o aes() está no geom_point(), o
mapeamento é local, afetando apenas essa camada.
O tamanho (size = 3) é um valor constante → portanto
fica fora do aes().
Exemplo 2: — Dispersão com tamanho representando o PIB per capita
g <- ggplot(df_2007) +
geom_point(aes(x = log_gdp_per_capita,
y = life_expec,
color = continent,
size = gdpPercap))
g
O que está sendo feito:
Mantém-se o mesmo gráfico do exemplo anterior, mas agora:
O tamanho do ponto varia conforme o PIB per capita real
(gdpPercap).
O size está dentro do aes(), pois é
mapeado a uma variável (não é constante).
Esse gráfico é um bolha colorida, pois varia cor e tamanho simultaneamente.
A tabela apresentada resume os principais tipos de geometrias e seus usos.
| Tipo de Gráfico | Geometria | Uso |
|---|---|---|
| Dispersão | geom_point() |
Relações entre variáveis numéricas |
| Barras | geom_col(), geom_bar() |
Comparações de categorias |
| Linhas | geom_line() |
Séries temporais |
| Histograma | geom_histogram() |
Distribuição |
| Boxplot | geom_boxplot() |
Distribuição via quantis |
| Texto | geom_text() / geom_label() |
Anotações |
O geom_point() é utilizado para criar gráficos
de dispersão, ideais para visualizar relações entre duas
variáveis numéricas. Ele também permite representar categorias,
intensidade, magnitude e agrupamentos usando cor, forma e tamanho.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
color / colour |
Cor do ponto (contorno para shapes 21–25) | color = "blue" |
fill |
Cor interna do ponto (somente para shapes 21–25) | fill = "white" |
shape |
Forma do ponto (0–25) | shape = 16 |
size |
Tamanho do ponto | size = 3 |
alpha |
Transparência do ponto (0–1) | alpha = 0.6 |
stroke |
Espessura da borda do ponto (shapes 21–25) | stroke = 1 |
position |
Ajuste de posição ("identity", "jitter" ou
position_jitter()) |
position = "jitter" |
na.rm |
Remove valores ausentes sem avisos
(TRUE/FALSE) |
na.rm = TRUE |
stat |
Estatística aplicada (default "identity") |
stat = "identity" |
mapping |
Estética local (útil para sobrepor camadas com mapeamentos diferentes) | mapping = aes(color = z) |
orientation |
Orientação dos eixos (geralmente detectada automaticamente) | orientation = "x" |
ggplot(df_2007) +
geom_point(aes(x = log_gdp_per_capita,
y = life_expec,
size = populacao)) +
labs(title = "Renda per Capita vs. Expectativa de Vida")
O que está sendo feito:
Cada ponto representa um país no ano de 2007.
Eixo X: renda per capita (log).
Eixo Y: expectativa de vida.
Tamanho da bolha: população total do país.
O gráfico permite identificar países muito populosos e os relacionar com saúde e renda.
O geom_col() é usado quando você já possui os valores
numéricos que representam a altura das barras (diferente de
geom_bar(), que calcula contagens automaticamente). Ele
permite visualizar comparações entre categorias, proporções ou valores
agregados.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
fill |
Cor interna das barras | fill = "steelblue" |
color / colour |
Cor das bordas das barras | color = "black" |
alpha |
Transparência das barras (0–1) | alpha = 0.7 |
width |
Largura das barras (0 a 1) | width = 0.8 |
linewidth / size |
Espessura da linha de contorno | size = 0.5 |
position |
Modo de disposição das barras (stack,
dodge, fill) |
position = "dodge" |
stat |
Estatística usada (default "identity", que usa y
diretamente) |
stat = "identity" |
orientation |
Orientação da barra ("x" ou "y") |
orientation = "y" |
df_feliz %>%
group_by(continent) %>%
summarise(pop_total = sum(populacao)) %>%
ggplot() +
geom_col(aes(x = continent, y = pop_total))
O que está sendo feito:
A população total é somada por continente.
geom_col() plota barras onde:
O eixo X contém continentes.
O eixo Y contém a população agregada.
Como a altura da barra já está nos dados, usamos
geom_col() e não geom_bar().
O geom_boxplot é a função do ggplot2 usada para criar
boxplots, permitindo visualizar a distribuição
de uma variável por meio de seus quartis, mediana e possíveis
outliers.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
width |
Controla a largura dos boxplots | width = 0.6 |
fill |
Cor interna da caixa | fill = "lightblue" |
color |
Cor das bordas | color = "black" |
alpha |
Transparência do boxplot (0–1) | alpha = 0.7 |
size / lwd |
Espessura das linhas do boxplot | size = 0.5 |
varwidth |
Largura proporcional ao tamanho do grupo | varwidth = TRUE |
outlier.colour |
Cor dos outliers | outlier.colour = "red" |
outlier.size |
Tamanho dos outliers | outlier.size = 2 |
outlier.shape |
Formato dos outliers | outlier.shape = 19 |
ggplot(mtcars) +
geom_boxplot(aes(x = as.factor(cyl), y = mpg)) +
labs(x = "Número de cilindros", y = "Milhas/galão")
ggplot(mtcars) +
geom_boxplot(aes(x = as.factor(cyl), y = mpg, colour=as.factor(cyl))) +
labs(x = "Número de cilindros", y = "Milhas/galão")
ggplot(mtcars) +
geom_boxplot(aes(x = as.factor(cyl), y = mpg, fill=as.factor(cyl),
colour=as.factor(cyl))) +
labs(x = "Número de cilindros", y = "Milhas/galão")
ggplot(mtcars) +
geom_boxplot(
aes(x = as.factor(cyl),
y = mpg, colour=as.factor(cyl)),
width = 0.6, # largura do boxplot
varwidth = FALSE, # TRUE = largura proporcional ao tamanho do grupo
fill = "lightblue", # cor interna
color = "black", # cor das bordas
alpha = 0.7, # transparência
size = 0.5, # espessura das linhas
outlier.colour = "red", # cor dos outliers
outlier.size = 2, # tamanho dos outliers
outlier.shape = 19 # tipo de ponto para outliers
)+
labs(x = "Número de cilindros", y = "Milhas/galão")
O geom_histogram() é a geometria do ggplot2
usada para construir histogramas, permitindo visualizar a distribuição
de uma variável numérica por meio de contagens dentro de intervalos
(bins).
A seguir, são apresentados os principais parâmetros da função.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
bins |
Número de barras do histograma | bins = 30 |
binwidth |
Largura dos intervalos (define o tamanho de cada barra) | binwidth = 1 |
fill |
Cor interna das barras | fill = "steelblue" |
color |
Cor das bordas das barras | color = "black" |
alpha |
Transparência das barras (0–1) | alpha = 0.7 |
boundary |
Valor onde começa a ancoragem dos bins | boundary = 0 |
closed |
Define intervalo fechado em "right" ou
"left" |
closed = "left" |
position |
Ajuste em gráficos sobrepostos ("identity",
"stack", "dodge") |
position = "identity" |
na.rm |
Remove NA sem aviso |
na.rm = TRUE |
Exemplos:
ggplot(mtcars) +
geom_histogram(aes(x = mpg), fill = "red")+
labs(x = "Milhas/galão", y = "Frequência absoluta")
ggplot(mtcars) +
geom_histogram(aes(x = mpg), fill = "red",
bins=5, colour="brown", alpha=0.2, position = "dodge")+
labs(x = "Milhas/galão", y = "Frequência absoluta")
O geom_bar() é a geometria do ggplot2 usada
para criar gráficos de barras baseados em contagens de uma variável
categórica, geradas automaticamente pelo próprio ggplot2. A seguir, são
apresentados os principais parâmetros da função.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
stat |
Define a estatística usada; padrão é "count" |
stat = "count" |
position |
Ajuste de posicionamento: "stack",
"dodge", "fill", "identity" |
position = "dodge" |
fill |
Cor interna das barras | fill = "skyblue" |
color |
Cor da borda das barras | color = "black" |
alpha |
Transparência das barras (0–1) | alpha = 0.8 |
width |
Largura das barras | width = 0.7 |
na.rm |
Remove NAs sem gerar aviso |
na.rm = TRUE |
linewidth |
Espessura da borda das barras | linewidth = 0.5 |
orientation |
Orientação: "x" ou "y" (geralmente
automático) |
orientation = "x" |
ggplot(mtcars) +
geom_bar(aes(x = factor(am)))
O geom_smooth() é usado para adicionar linhas de
tendência ou curvas suavizadas em gráficos,
ajudando a identificar padrões, relações e tendências entre variáveis.
Ele suporta modelos lineares, loess, GAM e outros métodos de ajuste.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
method |
Método de ajuste: "lm" (linear), "loess",
"gam", "glm", etc. |
method = "lm" |
formula |
Fórmula para o modelo (p.ex. y ~ x,
y ~ poly(x,2)) |
formula = y ~ x |
se |
Exibe intervalo de confiança (TRUE/FALSE) | se = FALSE |
level |
Nível do intervalo de confiança (default 0.95) | level = 0.90 |
span |
Grau de suavização no loess (0–1) | span = 0.8 |
color / colour |
Cor da linha da suavização | color = "red" |
fill |
Cor da banda de confiança | fill = "pink" |
linetype |
Tipo da linha (1–6) | linetype = 2 |
linewidth / size |
Espessura da linha | linewidth = 1 |
method.args |
Argumentos adicionais para o método | method.args = list(family="gaussian") |
formula |
Fórmula do modelo a ser ajustado | formula = y ~ poly(x,2) |
position |
Ajuste de posição (raro em smooths, normalmente
"identity") |
position = "identity" |
na.rm |
Remove valores ausentes sem avisos | na.rm = TRUE |
orientation |
Orientação (detectada automaticamente) | orientation = "x" |
ggplot(df_2007, aes(x = log_gdp_per_capita, y = life_expec)) +
geom_point() +
geom_smooth(method = "lm")
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
scale_color_manual()A função scale_color_manual() permite definir
cores personalizadas para variáveis mapeadas à estética
color no ggplot2. É especialmente útil quando se deseja
controlar exatamente as cores atribuídas a cada categoria.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
values |
Vetor de cores atribuídas às categorias | values = c("A" = "red", "B" = "blue") |
name |
Título da legenda | name = "Grupo" |
labels |
Rótulos personalizados das categorias | labels = c("A" = "Tipo A", "B" = "Tipo B") |
breaks |
Ordem e seleção das categorias na legenda | breaks = c("B","A") |
limits |
Define categorias exibidas (inclusive ocultando algumas) | limits = c("A","B","C") |
na.value |
Cor atribuída a valores ausentes | na.value = "grey80" |
guide |
Tipo de legenda ("legend", "none",
etc.) |
guide = "legend" |
drop |
Remove níveis não utilizados (TRUE/FALSE) | drop = FALSE |
aesthetics |
Define quais estéticas a escala afeta (geralmente
"colour" apenas) |
aesthetics = "colour" |
ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red"))
ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red"),
name = "Especie",
labels = c("Setosa", "Versicolor","Virginica"))
No ggplot2, facetas (facets) é uma forma de dividir um
gráfico em vários subgráficos menores, cada um mostrando uma parte dos
dados segundo uma variável categórica ou contínua discretizada.
Elas funcionam como “painéis” que permitem comparar grupos lado a lado, mantendo a mesma escala e estética.
Por que usar facetas?
Comparar padrões entre grupos
Facilitar a visualização de interações
Evitar sobreposição de muitos elementos em um único gráfico
Criar painéis organizados automaticamente
Exemplos:
facet_wrap()A função facet_wrap() divide o gráfico em várias
janelas (painéis), cada uma representando um subconjunto dos
dados. É usada para comparar grupos categóricos lado a lado, preservando
a mesma estrutura gráfica.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
facets |
Variável (ou interação de variáveis) usada para dividir os painéis | ~ continente |
nrow |
Número de linhas dos painéis | nrow = 2 |
ncol |
Número de colunas dos painéis | ncol = 3 |
scales |
Controle das escalas ("fixed", "free",
"free_x", "free_y") |
scales = "free_y" |
shrink |
Ajusta limites das escalas conforme o conteúdo de cada painel | shrink = TRUE |
dir |
Direção da organização dos painéis ("h" = horizontal,
"v" = vertical) |
dir = "h" |
strip.position |
Posicionamento das tiras de rótulos (top, bottom, left, right) | strip.position = "top" |
labeller |
Personaliza rótulos dos painéis | labeller = label_both |
drop |
Remove níveis não usados do fator | drop = FALSE |
ggplot(df_2007, aes(log_gdp_per_capita, life_expec)) +
geom_point() +
facet_wrap(vars(continent))
facet_grid()A função facet_grid() organiza os gráficos em uma
grade bidimensional (linhas × colunas), permitindo
comparar duas variáveis categóricas simultaneamente — uma nas
linhas e outra nas colunas.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
rows / cols |
Variáveis definidas para linhas e colunas (geralmente com a sintaxe
var1 ~ var2) |
facet_grid(sexo ~ continente) |
scales |
Escalas dos eixos: "fixed", "free",
"free_x", "free_y" |
scales = "free_y" |
space |
Espaço entre painéis ao usar escalas livres: "fixed" ou
"free" |
space = "free_y" |
shrink |
Ajusta limites da escala conforme cada painel | shrink = TRUE |
labeller |
Personalização dos rótulos (ex.: label_both,
label_value, label_wrap_gen) |
labeller = label_both |
drop |
Remove níveis de fatores não usados | drop = FALSE |
switch |
Troca posição dos rótulos das facetas para "x" ou
"y" |
switch = "x" |
as.table |
Organiza painéis de cima para baixo (TRUE, padrão) ou de baixo para cima (FALSE) | as.table = FALSE |
ggplot(mpg, aes(displ, hwy)) +
geom_point()+
facet_grid(drv ~ fl)
facet_grid(linhas ~ colunas)
facet_grid(var ~ .)facet_grid(. ~ var)ggplot(df_2007, aes(x = life_expec, y = gdpPercap)) +
geom_point() +
facet_grid(continent ~ .)
ggplot(df_2007, aes(x = life_expec, y = log_gdp_per_capita)) +
geom_point(alpha = 0.7) +
facet_grid(continent ~ year)
ggplot(df_2007, aes(x = life_expec, y = populacao)) +
geom_point() +
facet_grid(continent ~ year, scales = "free_y")
No ggplot2, “rótulos” (labels) são usados para
dar nomes e explicações ao gráfico, enquanto “temas” (themes)
servem para estilizar a parte visual (cores, fontes, fundo,
linhas, textos).
themesO theme() é a função do ggplot2 responsável por
controlar todos os aspectos visuais e estéticos do gráfico, como textos,
fundos, grades, legendas, margens e rótulos das facetas. A seguir, são
apresentados os principais elementos que podem ser ajustados dentro da
função.
| Elemento | Uso / Descrição | Exemplo |
|---|---|---|
plot.title |
Estiliza o título do gráfico | element_text(size = 16) |
plot.subtitle |
Estiliza o subtítulo | element_text(color = "gray40") |
plot.caption |
Estiliza a legenda/fonte do gráfico | element_text(size = 9) |
axis.title.x |
Texto do título do eixo X | element_text(face = "bold") |
axis.title.y |
Texto do título do eixo Y | element_text(face = "bold") |
axis.text.x |
Texto dos marcadores do eixo X | element_text(size = 10) |
axis.text.y |
Texto dos marcadores do eixo Y | element_text(size = 10) |
legend.title |
Título da legenda | element_text(face = "bold") |
legend.text |
Texto dos itens da legenda | element_text(size = 10) |
legend.position |
Posição da legenda ("right", "left",
"top", "bottom") |
"right" |
panel.background |
Fundo da área do gráfico | element_rect(fill = "white") |
panel.grid |
Controla todas as grades | element_line(color = "gray90") |
panel.grid.major |
Linhas principais da grade | element_line() |
panel.grid.minor |
Linhas secundárias da grade | element_blank() |
strip.text |
Texto nos cabeçalhos das facetas | element_text(face = "bold") |
strip.background |
Fundo dos cabeçalhos das facetas | element_rect(fill = "gray90") |
plot.margin |
Margens externas do gráfico | margin(10, 10, 10, 10) |
p <- ggplot(df_2007, aes(x = log_gdp_per_capita, y = life_expec)) +
geom_point() +
theme(panel.background = element_rect(fill = "gray95"),
axis.title = element_text(size = 14))
p
q <- ggplot(df_2007, aes(x = log_gdp_per_capita, y = life_expec)) +
geom_point() +
theme(panel.background = element_rect(fill = "white"),
axis.title = element_text(size = 14))
q
p+
theme(
# ----- TÍTULOS E TEXTOS DO GRÁFICO -----
plot.title = element_text(size = 16, face = "bold"),
plot.subtitle = element_text(size = 12),
plot.caption = element_text(size = 10, color = "gray40"),
# ----- TÍTULOS E TEXTOS DOS EIXOS -----
axis.title.x = element_text(size = 12, face = "bold"),
axis.title.y = element_text(size = 12, face = "bold"),
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 10),
# ----- LEGENDA -----
legend.title = element_text(face = "bold"),
legend.text = element_text(),
legend.position = "right", # "left", "bottom", "top", "none"
# ----- PAINEL (ÁREA DO GRÁFICO) -----
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank(),
# ----- TÍTULOS DAS FACETAS -----
strip.text = element_text(face = "bold"),
strip.background = element_rect(fill = "gray90"),
# ----- MARGENS -----
plot.margin = margin(10, 10, 10, 10)
)
labsA função labs() no ggplot2 é utilizada para definir ou
alterar os rótulos textuais do gráfico, como título, subtítulo, nomes
dos eixos, legendas e notas de rodapé. A seguir, são apresentados os
principais argumentos da função para configuração de rótulos.
| Argumento | Uso / Descrição | Exemplo |
|---|---|---|
title |
Define o título principal do gráfico | title = "Título do gráfico" |
subtitle |
Define o subtítulo | subtitle = "Um subtítulo opcional" |
x |
Nome do eixo X | x = "Eixo X" |
y |
Nome do eixo Y | y = "Eixo Y" |
caption |
Texto da fonte/nota do gráfico | caption = "Fonte: Dados XYZ" |
color |
Título da legenda de cores | color = "Grupo" |
fill |
Título da legenda de preenchimento | fill = "Categoria" |
shape |
Título da legenda de formato de pontos | shape = "Tipo" |
linetype |
Título da legenda de tipo de linha | linetype = "Linha" |
size |
Título da legenda de tamanho | size = "Tamanho" |
p + labs(
x = "Log do PIB per capita",
y = "Expectativa de vida (anos)",
title = "PIB per capita e Expectativa de Vida"
)
ggplot(mpg, aes(displ, hwy, color = class, shape = drv, size = cyl)) +
geom_point(alpha = 0.7) +
labs(
title = "Relação entre Cilindrada e Consumo",
subtitle = "Exemplo usando múltiplos parâmetros de labs()",
x = "Cilindrada (L)",
y = "Consumo em rodovia (mpg)",
caption = "Fonte: Base mpg do pacote ggplot2",
color = "Classe do veículo",
shape = "Tipo de tração",
size = "Número de cilindros"
)
Pense no ggplot2 como um sanduíche
gourmet:
ggplot() = o pão: define base (dados)
e regras globais (aes()).geom_ = um ingrediente (uma
camada).aes() local = instrução específica para um
ingrediente.+ = junta tudo.scale_ e theme_ = o molho
e a embalagem final.