Criando gráficos elegantes com o dataset CO2
Fique por dentro das aulas, conteúdos, newsletter!
Que cada gole desperte uma nova ideia.
Que cada script abra uma nova conversa.
Que o Café com R, se torne um ponto de encontro nosso!
Visualização é a arte de contar histórias com dados.
O pacote ggplot2 é a ferramenta mais poderosa para isso no R.
Allison Horst.
Você aprenderá:
Vantagens:
Filosofia: construir gráficos em camadas
Rows: 84
Columns: 5
$ Plant <ord> Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn2, Qn2, Qn2, Qn2, Qn2, …
$ Type <fct> Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Queb…
$ Treatment <fct> nonchilled, nonchilled, nonchilled, nonchilled, nonchilled, …
$ conc <dbl> 95, 175, 250, 350, 500, 675, 1000, 95, 175, 250, 350, 500, 6…
$ uptake <dbl> 16.0, 30.4, 34.8, 37.2, 35.3, 39.2, 39.7, 13.6, 27.3, 37.1, …
84 observações de absorção de CO₂ em plantas de Quebec e Mississippi, sob diferentes tratamentos.
Todo gráfico no ggplot2 tem três componentes essenciais:
Estrutura básica:
Principais aesthetics:
x, y: posição nos eixoscolor: cor de pontos/linhasfill: preenchimento de áreassize: tamanhoshape: forma dos pontosalpha: transparêncialinetype: tipo de linhaScatter plots mostram relação entre duas variáveis contínuas.
Quando usar:
Customização: size, shape, alpha, color
Métodos disponíveis:
"loess": suavização local (padrão para n < 1000)"lm": regressão linear"glm": modelos lineares generalizados"gam": modelos aditivos generalizadosParâmetros:
se: mostrar intervalo de confiançamethod: método de ajusteformula: fórmula customizadaCO2 |>
group_by(Type, Treatment) |>
summarise(media = mean(uptake), se = sd(uptake)/sqrt(n()),
.groups = "drop") |>
ggplot(aes(x = Type, y = media, fill = Treatment)) +
geom_col(position = position_dodge(0.7), width = 0.6) +
geom_errorbar(aes(ymin = media - se, ymax = media + se),
position = position_dodge(0.7), width = 0.2) +
scale_fill_manual(values = c("#224573", "#6B4F4F"))Boxplot:
Violin plot:
facet_wrap():
facet_grid():
Temas prontos:
theme_bw(): fundo branco com gridtheme_minimal(): minimalistatheme_classic(): clássico (sem grid)theme_dark(): fundo escurotheme_void(): sem elementosggplot(CO2, aes(x = conc, y = uptake, color = Type)) +
geom_point(size = 3) +
scale_color_manual(values = c("#224573", "#6B4F4F")) +
theme_classic() +
theme(
plot.title = element_text(size = 16, face = "bold",
color = "#224573"),
axis.title = element_text(size = 12, color = "#224573"),
legend.position = "top",
panel.grid.minor = element_blank())ggplot(CO2, aes(x = Treatment, y = uptake, fill = Type)) +
geom_boxplot(alpha = 0.6, outlier.shape = NA) +
geom_jitter(aes(color = Type), width = 0.15,
alpha = 0.5, size = 2) +
scale_fill_manual(values = c("#224573", "#4A6FA5")) +
scale_color_manual(values = c("#224573", "#4A6FA5")) +
theme_classic()CO2 |>
mutate(conc_cat = cut(conc, breaks = 5)) |>
group_by(Type, Treatment, conc_cat) |>
summarise(media = mean(uptake), .groups = "drop") |>
ggplot(aes(x = conc_cat, y = interaction(Type, Treatment),
fill = media)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "#E5D3B3", high = "#224573") +
theme_classic()ggplot(CO2, aes(x = Treatment, y = uptake, color = Type)) +
geom_jitter(width = 0.2, alpha = 0.4, size = 2) +
stat_summary(fun = mean, geom = "point",
size = 5, shape = 18) +
stat_summary(fun = mean, geom = "line",
aes(group = Type), linewidth = 1) +
scale_color_manual(values = c("#224573", "#6B4F4F")) +
theme_classic()ggplot(CO2, aes(x = conc, y = uptake)) +
geom_point(aes(color = Type), size = 2, alpha = 0.5) +
geom_smooth(method = "loess", color = "#224573",
fill = "#E5D3B3", alpha = 0.3) +
facet_wrap(~Treatment) +
scale_color_manual(values = c("#224573", "#6B4F4F")) +
theme_classic() +
labs(title = "Análise Completa: Absorção por Concentração",
x = "Concentração de CO₂ (mL/L)",
y = "Absorção de CO₂ (μmol/m²·s)")# Criar gráfico
p <- ggplot(CO2, aes(x = conc, y = uptake, color = Type)) +
geom_point(size = 3) +
scale_color_manual(values = c("#224573", "#6B4F4F")) +
theme_classic()
# Salvar
ggsave("meu_grafico.png", p,
width = 10, height = 6, dpi = 300)Formatos: PNG, PDF, SVG, JPEG
Do’s:
Don’ts:
CO2 |>
group_by(Type, Treatment) |>
summarise(media = mean(uptake), se = sd(uptake)/sqrt(n()),
.groups = "drop") |>
ggplot(aes(x = Type, y = media, fill = Treatment)) +
geom_col(position = position_dodge(0.8), width = 0.7) +
geom_errorbar(aes(ymin = media - se, ymax = media + se),
position = position_dodge(0.8), width = 0.25) +
scale_fill_manual(values = c("#224573", "#6B4F4F"),
labels = c("Resfriado", "Não Resfriado")) +
theme_minimal(base_size = 14) +
labs(y = "Absorção média ± EP (μmol/m²·s)", x = NULL)library(patchwork)
p1 <- ggplot(CO2, aes(x = uptake)) +
geom_histogram(fill = "#224573")
p2 <- ggplot(CO2, aes(x = Type, y = uptake)) +
geom_boxplot(fill = "#4A6FA5")
p1 + p2 # combina lado a ladoPatchwork permite combinar múltiplos gráficos facilmente.
Pacotes úteis:
ggrepel: labels sem sobreposiçãogganimate: gráficos animadosggridges: ridge plotsggforce: geometrias extrascowplot: composição de gráficospatchwork: combinar plotsInteratividade: hover, zoom, pan automáticos!
Construa incrementalmente:
Documentação e tutoriais:
Comunidade:
Você aprendeu:
Continue praticando:
Lembre-se: a melhor forma de aprender é fazendo!
É OPEN, USE, COMPARTILHE!
Allison Horst.
Pratique, explore e crie visualizações incríveis!
Fique por dentro das aulas, conteúdos, newsletter!
Que cada gole desperte uma nova ideia.
Que cada script abra uma nova conversa.
Que o Café com R, se torne um ponto de encontro nosso!

Jennifer Lopes • Café com R