introR: introdução à linguagem R
15 de outubro de 2025
Abram o script
04_script_intror.R
Melhor forma de apresentar, sintetizar, discutir e interpretar seus dados
Necessário em quase todas as análises estatísticas
Necessário em quase todas as publicações, trabalhos de consultoria, TCC, dissertação, tese, etc.
Existem vários tipos de gráficos para representar os padrões em seus dados para diferentes tipos de finalidades
De forma simplificada, os gráficos são representações dos nossos dados tabulares
graphics: simples e útil para visualizações rápidas
lattice: integração a modelos estatísticos
ggplot2: integrado ao tidyverse, possui uma sintaxe própria baseada na gramática de gráficos por camadas (layers)
ggplot2 extentions: conjunto de pacotes com diversas expansões ao pacote ggplot2. Exemplos: GGally, gganimate e esquisse
ggdist: visualizar distribuições e incertezas
visdat, corrplot e DataExplorer: visualizações preliminares de conjuntos de dados
ggpubr: fornece funções simplificadas para criar gráficos para publicação
ggstatsplot: gráficos com detalhes de testes estatísticos
plotly: gráficos interativos usando JavaScript (plotly.js)
echarts4r: gráficos interativos dentro do Shiny
cols4all: escolha de paleta de cores
Default do R e mais simples
Pode ser utilizado para objetos de diversas classes
Funções:
Integrado ao tidyverse
, possui uma sintaxe própria de camadas (layers)
Necessita de funções específicas para objetos de classes diferentes
Funções:
Funções para criar e personalizar plots para publicações baseadas no ggplot2
Necessita de funções específicas para gerar gráficos específicos
Funções:
Wilkinson (2005) Grammar of Graphics: representação gráfica dos dados a partir de atributos estéticos (do inglês aesthetic)
Wickham (2008) criou o pacote ggplot2
, onde “gg” representa a contração de Grammar of Graphics
Por que usar paletas de cores
Tipos de Paletas
Tipo | Uso | Exemplo |
---|---|---|
Categóricas | Categorias sem ordem | RColorBrewer::brewer.pal(3, "Set2") |
Sequenciais | Dados ordenados (baixa → alta) | viridis::viridis(10) |
Divergentes | Valores centrados em um ponto médio | RColorBrewer::brewer.pal(11, "RdBu") |
cols4all
Representações das colunas (eixos) e linhas (elementos)
Matthiopoulos (2011), Artwork by @allison_horst
Representa dados de uma coluna
Dados do tipo discreto ou contínuo
Distribuição de frequência ou densidade
graphics
graphics
graphics
graphics
graphics
graphics
graphics
par(mar = c(5, 5, 5, 5))
hist(penguins$flipper_length_mm,
col = "gray50",
border = "gray",
main = "Comprimento da nadadeira dos penguins",
xlab = "Comprimento da nadadeira (mm)",
ylab = "Densidade",
br = 50,
cex.main = 2,
cex.lab = 2,
cex.axis = 1.5,
prob = TRUE)
lines(density(na.omit(penguins$flipper_length_mm)))
graphics
par(mar = c(5, 5, 5, 5))
plot(density(na.omit(penguins$flipper_length_mm)),
col = "gray50",
main = "Comprimento da nadadeira dos penguins",
xlab = "Comprimento da nadadeira (mm)",
ylab = "Densidade",
cex.main = 2,
cex.lab = 2,
cex.axis = 1.5)
polygon(density(na.omit(penguins$flipper_length_mm)),
col = "gray50")
Exportar
par(mar = c(5, 5, 5, 5))
plot(density(na.omit(penguins$flipper_length_mm)),
col = "gray50",
main = "Comprimento da nadadeira dos penguins",
xlab = "Comprimento da nadadeira (mm)",
ylab = "Frequência",
cex.main = 2, cex.lab = 2, cex.axis = 1.5)
polygon(density(na.omit(penguins$flipper_length_mm)), col = "gray50")
ggplot2
ggplot2
ggplot2
ggplot2
ggplot2
ggplot2
ggplot2
ggplot2
ggplot(data = penguins,
aes(x = flipper_length_mm, fill = species)) +
geom_histogram(alpha = .5, position = "identity") +
scale_fill_manual(values = c("darkorange", "darkorchid", "cyan4")) +
labs(title = "Comprimento da nadadeira dos penguins",
fill = "Espécies",
x = "Comprimento da nadadeira (mm)",
y = "Frequência") +
theme_bw(base_size = 20)
ggplot2
ggplot(data = penguins,
aes(x = flipper_length_mm, fill = species)) +
geom_histogram() +
scale_fill_manual(values = c("darkorange", "darkorchid", "cyan4")) +
facet_wrap(~ species, ncol = 2, scale = "free_y") +
labs(title = "Comprimento da nadadeira dos penguins",
fill = "Espécies",
x = "Comprimento da nadadeira (mm)",
y = "Frequência") +
theme_bw(base_size = 20)
ggplot2
ggplot(data = penguins,
aes(x = flipper_length_mm, fill = species)) +
geom_histogram() +
scale_fill_manual(values = c("darkorange", "darkorchid", "cyan4")) +
facet_grid(species ~ .) +
labs(title = "Comprimento da nadadeira dos penguins",
fill = "Espécies",
x = "Comprimento da nadadeira (mm)",
y = "Frequência") +
theme_bw(base_size = 20)
ggplot2
ggplot2
ggplot2
ggplot_densidade <- ggplot(data = penguins,
aes(x = flipper_length_mm, fill = species)) +
geom_density(alpha = .5) +
scale_fill_manual(values = c("darkorange", "darkorchid", "cyan4")) +
labs(x = "Comprimento da nadadeira (mm)",
y = "Densidade",
fill = "Espécie") +
theme_bw(base_size = 20)
ggsave(filename = "density_ggplot2.png",
plot = ggplot_densidade, wi = 20, he = 15, un = "cm", dpi = 300)
ggpubr
ggpubr
ggpubr
ggpubr_densidade <- ggdensity(data = penguins,
x = "flipper_length_mm",
add = "median",
color = "species",
fill = "species",
palette = c("darkorange", "darkorchid", "cyan4"),
xlab = "Comprimento da nadadeira (mm)",
ylab = "Densidade")
ggsave(filename = "densidade_ggpubr.png",
plot = ggpubr_densidade, wi = 20, he = 15, un = "cm", dpi = 300)
Representa dados de uma coluna
Dados do tipo categórico
Proporção ou porcentagem de dados categóricos
graphic
graphic
ggplot2
ggplot(data = penguins_prop,
aes(x = "", y = prop, fill = species)) +
geom_bar(stat = "identity", color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(prop, "%")), color = "white",
position = position_stack(vjust = .5), size = 8) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_void() +
labs(fill = "Espécie")
ggpubr
Representa dados de uma coluna
Dados do tipo categórico
Proporção ou porcentagem de dados categóricos
ggplot
ggplot(data = penguins_prop, aes(x = 2, y = prop, fill = species)) +
geom_bar(stat = "identity") +
coord_polar(theta = "y", start = 0) +
geom_text(aes(label = paste0(prop, "%")), color = "white",
position = position_stack(vjust = .5), size = 5) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
xlim(0, 2.5) +
theme_void() +
theme(legend.position = c(.5, .5),
legend.title = element_text(size = 20),
legend.text = element_text(size = 15)) +
labs(fill = "Espécie")
ggpubr
Representa dados de duas colunas
Dados do tipo categóricos: X = categórico e Y = categórico
Resume dados de contagens para uma coluna
Tabela de Frequência
graphics
ggplot2
ggplot(data = penguins_count,
aes(x = species, y = n, fill = species)) +
geom_bar(stat = "identity") +
geom_label(aes(label = n), fill = "white", size = 10) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
theme(legend.position = "none") +
labs(x = "Espécie",
y = "Número de indivíduos",
fill = "Espécie")
ggplot2
ggplot(data = penguins_count,
aes(x = species, y = n, fill = species)) +
geom_bar(stat = "identity") +
geom_label(aes(label = n), fill = "white", size = 10) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
coord_flip() +
theme_bw(base_size = 15) +
theme(legend.position = "none") +
labs(x = "Espécie",
y = "Número de indivíduos",
fill = "Espécie")
ggpubr
ggbarplot(penguins_count,
x = "species",
y = "n",
fill = "species",
color = "species",
palette = c("darkorange", "purple", "cyan4"),
label = TRUE,
lab.pos = "in",
lab.col = "white",
lab.size = 8,
main = "Número de indivíduos coletados por espécie",
xlab = "Espécies",
ylab = "Frequência absoluta",
legend = "none")
ggpubr
ggbarplot(penguins_count,
x = "species",
y = "n",
fill = "species",
color = "species",
palette = c("darkorange", "purple", "cyan4"),
label = TRUE,
lab.pos = "out",
lab.col = "black",
lab.size = 8,
main = "Número de indivíduos coletados por espécie",
xlab = "Espécies",
ylab = "Frequência absoluta",
legend = "none",
orientation = "horiz")
Gráfico dinamite (Dynamite plot)
Gráfico dinamite (Dynamite plot) - alternativas
Gráfico dinamite (Dynamite plot) - ggplot2
penguins_flipper_length_mn_sd <- penguins %>%
dplyr::group_by(species) %>%
dplyr::summarise(mean = mean(flipper_length_mm, na.rm = TRUE),
sd = sd(flipper_length_mm, na.rm = TRUE))
ggplot(data = penguins,
aes(x = species, y = flipper_length_mm, fill = species)) +
stat_summary(fun = mean,
geom = "col",
color = "black",
show.legend = FALSE) +
stat_summary(fun.data = mean_se,
geom = "errorbar",
width = 0.15,
linewidth = 0.8) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Species", y = "Flipper length (mm)")
Gráfico dinamite (Dynamite plot) - ggpubr
penguins_flipper_length_mn_sd <- penguins %>%
dplyr::group_by(species) %>%
dplyr::summarise(mean = mean(flipper_length_mm, na.rm = TRUE),
sd = sd(flipper_length_mm, na.rm = TRUE))
ggbarplot(penguins,
x = "species",
y = "flipper_length_mm",
fill = "species",
color = "gray30",
palette = c("darkorange", "purple", "cyan4"),
add = "mean_se",
add.params = list(size = 1),
main = "Tamanho médio da barbatana por espécie (desvio padrão)",
xlab = "Espécies",
ylab = "Frequência absoluta",
legend = "none")
Representa dados de duas colunas
Dados do tipo categóricos: X = categórico e Y = contínuo
Resume informações de medidas contínuas para dois ou mais fatores categóricos
Intervalo inter-quartil (interquartile range - IQR)
Limite inferior e limite superipor (1.5 x IQR)
Valores exteriores (outliers)
graphics
ggplot2
ggplot2
ggplot(data = penguins,
aes(x = species, y = flipper_length_mm, fill = species)) +
geom_boxplot(width = .3,
show.legend = FALSE) +
geom_jitter(alpha = .5,
show.legend = FALSE,
position = position_jitter(width = .1, seed = 0)) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Species", y = "Flipper length (mm)")
ggplot2
ggplot(data = penguins,
aes(x = species, y = flipper_length_mm, fill = species)) +
geom_violin(width = .3,
show.legend = FALSE) +
geom_jitter(alpha = .5,
show.legend = FALSE,
position = position_jitter(width = .1, seed = 0)) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(title = "Pontos com jitter", x = "Species", y = "Flipper length (mm)")
ggpubr
ggpubr
ggdist
Representa dados de duas colunas
Dados do tipo categóricos: X = contínuo e Y = contínuo
Plota a relação entre duas variáveis contínuas
graphics
ggplot2
ggplot(data = penguins,
aes(x = bill_length_mm,
y = bill_depth_mm,
color = species,
shape = species)) +
geom_point(size = 3, alpha = .8) +
scale_shape_manual(values = c(19, 15, 17)) +
scale_color_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Comprimento do bico (mm)",
y = "Profundidade do bico (mm)",
color = "Espécies", shape = "Espécies")
ggplot2
ggplot(data = penguins,
aes(x = bill_length_mm,
y = bill_depth_mm,
color = species,
shape = species)) +
geom_point(size = 3, alpha = .8) +
geom_smooth(method = "lm", se = FALSE) +
scale_shape_manual(values = c(19, 15, 17)) +
scale_color_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Comprimento do bico (mm)",
y = "Profundidade do bico (mm)",
color = "Espécies", shape = "Espécies")
Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing
Justin Matejka, George Fitzmaurice
ggplot2
ggplot2
ggpubr
ggpubr
ggpubr
ggpubr
Representa dados de duas colunas
Dados do tipo categóricos: X = contínuo e Y = contínuo
Plota a relação entre duas variáveis contínuas, mas para várias colunas
graphics
GGally
GGally
psych
Muitas vezes precisamos combinar gráficos para representar nossos dados
Essa tarefa pode ser realizada depois da criação dos gráficos em aplicativos como Inkskape ou GIMP
Outras vezes, podemos usar códigos e pacotes do R para fazer essa tarefa
graphics
par(mfrow = c(1, 2))
boxplot(flipper_length_mm ~ as.factor(species),
data = penguins,
col = c("darkorange", "purple", "cyan4"),
main = "Espécies por amostragens",
xlab = "Espécies",
ylab = "Comprimento da nadadeira (mm)",
cex.main = 1.5, cex.lab = 1.3, cex.axis = 1.2)
plot(bill_depth_mm ~ bill_length_mm,
data = penguins,
pch = 20,
cex = 1.5,
main = "Comprimento e profundidade do bico",
xlab = "Comprimento do bico (mm)",
ylab = "Profundidade do bico (mm)",
cex.lab = 1.5, cex.axis = 1.3)
graphics
par(mfrow = c(2, 1))
boxplot(flipper_length_mm ~ as.factor(species),
data = penguins,
col = c("darkorange", "purple", "cyan4"),
main = "Espécies por amostragens",
xlab = "Espécies",
ylab = "Comprimento da nadadeira (mm)",
cex.main = 1.5, cex.lab = 1.3, cex.axis = 1.2)
plot(bill_depth_mm ~ bill_length_mm,
data = penguins,
pch = 20,
cex = 1.5,
main = "Comprimento e profundidade do bico",
xlab = "Comprimento do bico (mm)",
ylab = "Profundidade do bico (mm)",
cex.lab = 1.5, cex.axis = 1.3)
ggplot2
ggplot_boxplot <- ggplot(data = penguins,
aes(x = species, y = flipper_length_mm, fill = species)) +
geom_boxplot(width = .3,
show.legend = FALSE) +
geom_jitter(alpha = .5,
show.legend = FALSE,
position = position_jitter(width = .1, seed = 0)) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Species", y = "Flipper length (mm)")
ggplot_boxplot
ggplot2
ggplot_scatterplot <- ggplot(data = penguins,
aes(x = bill_length_mm,
y = bill_depth_mm,
color = species,
shape = species)) +
geom_point(size = 3, alpha = .8) +
scale_shape_manual(values = c(19, 15, 17)) +
scale_color_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Comprimento do bico (mm)",
y = "Profundidade do bico (mm)",
color = "Espécies", shape = "Espécies")
ggplot_scatterplot
cowplot
cowplot
patchwork
patchwork
gganimate
# pacote
# install.packages("gganimate")
library(gganimate)
plot_animate <- ggplot(data = penguins,
aes(x = bill_length_mm,
y = bill_depth_mm,
color = species)) +
geom_point() +
scale_color_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Comprimento do bico (mm)",
y = "Profundidade do bico (mm)",
color = "Espécies", shape = "Espécies") +
labs(title = "{closest_state}") +
transition_states(species) +
enter_grow() +
exit_fade()
plot_animate
gganimate
plotly
# pacote
# install.packages("plotly")
library(plotly)
plot_ly(data = penguins,
x = ~bill_length_mm,
y = ~bill_depth_mm,
type = "scatter",
color = ~species,
colors = c("darkorange", "purple", "cyan4")) %>%
layout(xaxis = list(title = "Comprimento do bico (mm)"),
yaxis = list(title = "Profundidade do bico (mm)"))
plotly
plot_ly(data = penguins,
x = ~bill_length_mm,
y = ~bill_depth_mm,
z = ~body_mass_g,
type = "scatter3d",
color = ~species,
colors = c("darkorange", "purple", "cyan4")) %>%
layout(scene = list(xaxis = list(title = "Comprimento do bico (mm)"),
yaxis = list(title = "Profundidade do bico (mm)"),
zaxis = list(title = "Massa (g)")))
plotly
plot_penguins_scatter_int <- ggplotly(
ggplot(data = penguins,
aes(x = bill_length_mm,
y = bill_depth_mm,
color = species,
shape = species)) +
geom_point(size = 3, alpha = .8) +
geom_smooth(method = "lm", se = FALSE) +
scale_shape_manual(values = c(19, 15, 17)) +
scale_color_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw(base_size = 15) +
labs(x = "Comprimento do bico (mm)",
y = "Profundidade do bico (mm)",
color = "Espécies", shape = "Espécies"))
plot_penguins_scatter_int
plotly
esquisse
esquisse - Shiny