Introdução à programação em R (visualização)



introR: introdução à linguagem R

15 de outubro de 2025

Visualização de dados

Conteúdo

Visualização de dados

  • Contextualização
  • Principais pacotes
  • Gramática dos gráficos
  • Paleta de cores
  • Principais tipos de gráficos
  • Histograma e Densidade
  • Gráfico de setores
  • Gráfico de barras
  • Gráfico de caixas
  • Gráfico de dispersão
  • Gráfico pareado
  • Combinando gráficos
  • Gráficos animados
  • Gráficos interativos
  • Gráficos usando interface

Script

Abram o script





04_script_intror.R

Contextualização

Contextualização

  • 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

Como mentir com estatística?

Principais pacotes

Principais pacotes

  • 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

  • cowplot e patchwork: permite combinar vários gráficos

  • plotly: gráficos interativos usando JavaScript (plotly.js)

  • echarts4r: gráficos interativos dentro do Shiny

  • cols4all: escolha de paleta de cores

Pacotes que serão apresentados


palmerpenguins

# instalar 
install.packages("palmerpenguins")

# carregar
library(palmerpenguins)

# ajuda dos dados
?penguins
?penguins_raw

graphics

  • Default do R e mais simples

  • Pode ser utilizado para objetos de diversas classes

  • Funções:


plot()
hist()
barplot()
boxplot()
abline()
points()
lines()
polygon()

# graphics
plot(flipper_length_mm ~ body_mass_g, data = penguins)

ggplot2

  • Integrado ao tidyverse, possui uma sintaxe própria de camadas (layers)

  • Necessita de funções específicas para objetos de classes diferentes

  • Funções:

ggplot() +
aes() +
geom_() +
facet_() +
stats_() +
coord_() +
theme_()

# ggplot2
library(ggplot2)
ggplot(data = penguins) + aes(x = body_mass_g, y = flipper_length_mm) + geom_point()

ggpubr

  • 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:

gghistogram()
ggdensity()
ggboxplot()
ggviolin()
ggbarplot()
ggscatter()

# ggpubr
library(ggpubr)
ggscatter(penguins, x = "body_mass_g", y = "flipper_length_mm")

Gramática dos gráficos

Descrição

Wilkinson (2005) Grammar of Graphics: representação gráfica dos dados a partir de atributos estéticos (do inglês aesthetic)

Camadas (layers)

ggplot2

Wickham (2008) criou o pacote ggplot2, onde “gg” representa a contração de Grammar of Graphics

Paleta de cores

Paleta de cores

Por que usar paletas de cores

  • A cor é fundamental para comunicar padrões visuais e categorias
  • Escolhas inadequadas podem distorcer interpretações
  • Paletas bem definidas garantem consistência e acessibilidade

Paleta 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")

Paleta de cores

cols4all

cols4all::c4a_gui()

Principais tipos de gráficos

Elementos de um gráfico

Representações das colunas (eixos) e linhas (elementos)

Tipos de variáveis

Tipos de variáveis e tipos gráficos


Tipos de variáveis e tipos gráficos

R CHARTS

Histograma (Histogram)

Histograma (Histogram)

  • Representa dados de uma coluna

  • Dados do tipo discreto ou contínuo

  • Distribuição de frequência ou densidade

Histograma (Histogram)


Histograma (Histogram)

Densidade (Density)



Densidade (Density)

Histograma (Histogram)

graphics

hist(penguins$flipper_length_mm)

Histograma (Histogram)

graphics

hist(penguins$flipper_length_mm,
     col = "gray50",
     border = "gray")

Histograma (Histogram)

graphics

hist(penguins$flipper_length_mm,
     col = "gray50",
     border = "gray",
     main = "Comprimento da nadadeira dos penguins")

Histograma (Histogram)

graphics

hist(penguins$flipper_length_mm,
     col = "gray50",
     border = "gray",
     main = "Comprimento da nadadeira dos penguins",
     xlab = "Comprimento da nadadeira (mm)",
     ylab = "Frequência")

Histograma (Histogram)

graphics

hist(penguins$flipper_length_mm,
     col = "gray50",
     border = "gray",
     main = "Comprimento da nadadeira dos penguins",
     xlab = "Comprimento da nadadeira (mm)",
     ylab = "Frequência",
     br = 50)

Histograma (Histogram)

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 = "Frequência",
     br = 50,
     cex.main = 2,
     cex.lab = 2, 
     cex.axis = 1.5)

Densidade (Density)

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

Densidade (Density)

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

Densidade (Density)

Exportar

# diretorio
setwd("/home/mude/data/github/course-intror/data")

png("plot_densidade.png"), wi = 15, he = 15, un = "cm", res = 300)


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


dev.off()

Histograma (Histogram)

ggplot2

ggplot(data = penguins)

Histograma (Histogram)

ggplot2

ggplot(data = penguins, aes(x = flipper_length_mm))

Histograma (Histogram)

ggplot2

ggplot(data = penguins, aes(x = flipper_length_mm)) +
  geom_histogram()

Histograma (Histogram)

ggplot2

ggplot(data = penguins,  aes(x = flipper_length_mm)) +
  geom_histogram(color = "black", fill = "cyan4", bins = 10)

Histograma (Histogram)

ggplot2

ggplot(data = penguins, aes(x = flipper_length_mm)) +
  geom_histogram(color = "black", fill = "cyan4", 
                 bins = 10, alpha = .5) +
  labs(title = "Comprimento da nadadeira dos penguins",
       x = "Comprimento da nadadeira (mm)", 
       y = "Frequência") +
  theme_bw(base_size = 20)

Histograma (Histogram)

ggplot2

ggplot(data = penguins, 
       aes(x = flipper_length_mm, fill = species)) +
  geom_histogram(bins = 10, alpha = .5) +
  labs(title = "Comprimento da nadadeira dos penguins",
       fill = "Espécies",
       x = "Comprimento da nadadeira (mm)", 
       y = "Frequência") +
  theme_bw(base_size = 20)

Histograma (Histogram)

ggplot2

ggplot(data = penguins, 
       aes(x = flipper_length_mm, fill = species)) +
  geom_histogram(bins = 10, alpha = .5, position = "dodge") +
  labs(title = "Comprimento da nadadeira dos penguins",
       fill = "Espécies",
       x = "Comprimento da nadadeira (mm)", 
       y = "Frequência") +
  theme_bw(base_size = 20)

Histograma (Histogram)

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)

Histograma (Histogram)

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)

Histograma (Histogram)

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)

Densidade (Density)

ggplot2

ggplot(data = penguins) +
  aes(x = flipper_length_mm) +
  geom_density(color = "black", fill = "cyan4", alpha = .5) + 
  labs(title = "Comprimento da nadadeira dos penguins",
       x = "Comprimento da nadadeira (mm)", 
       y = "Densidade") +
  theme_bw(base_size = 20)

Densidade (Density)

ggplot2

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)

Densidade (Density)

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)

Histograma (Histogram)

ggpubr

gghistogram(data = penguins, 
            x = "flipper_length_mm",
            add = "median",
            color = "species",
            fill = "species",
            palette = c("darkorange", "darkorchid", "cyan4"),
            xlab = "Comprimento da nadadeira (mm)",
            ylab = "Frequência")

Densidade (Density)

ggpubr

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

Histograma (Histogram)

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)

Gráfico de setores
(Pie chart)

Gráfico de setores (Pie chart)

  • Representa dados de uma coluna

  • Dados do tipo categórico

  • Proporção ou porcentagem de dados categóricos

Gráfico de setores (Pie chart)

graphic

par(mar = c(0, 1, 0, 1))
pie(c(280, 60, 20),
    c("Sky", 
      "Sunny side of pyramid", 
      "Shady side of pyramid"),
    col = c("#0292D8", 
            "#F7EA39", 
            "#C4B632"),
    init.angle = -50, border = NA)

Gráfico de setores (Pie chart)

# calculo da proporcao
penguins_prop <- penguins %>%
  dplyr::count(species) %>% 
  dplyr::mutate(prop = round(n/sum(n), 4)*100)
penguins_prop
# A tibble: 3 × 3
  species       n  prop
  <fct>     <int> <dbl>
1 Adelie      152  44.2
2 Chinstrap    68  19.8
3 Gentoo      124  36.0

Gráfico de setores (Pie chart)

graphic

par(mar = c(5, 5, 5, 5))
pie(penguins_prop$prop,
    labels = paste(penguins_prop$prop, "%"), 
    main = "Espécies",
    col = c("darkorange", "darkorchid", "cyan4"))
legend("topright", legend = penguins_prop$species, 
       fill = c("darkorange", "darkorchid", "cyan4"))

Gráfico de setores (Pie chart)

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

Gráfico de setores (Pie chart)

ggpubr

ggpie(penguins_prop,
      "prop", 
      label = "prop",
      lab.pos = "in", 
      lab.font = c(8, "white"),
      fill = "species", 
      color = "white",
      palette = c("darkorange", "purple", "cyan4"))

Polêmica 1!!!

Gráfico de setores (Donut chart)

Gráfico de setores (Donut chart)

  • Representa dados de uma coluna

  • Dados do tipo categórico

  • Proporção ou porcentagem de dados categóricos

Gráfico de setores (Donut chart)

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

Gráfico de setores (Donut chart)

ggpubr

ggdonutchart(penguins_prop,
             "prop", 
             label = "prop",
             lab.pos = "in", 
             lab.font = c(7, "white"),
             fill = "species", 
             color = "white",
             palette = c("darkorange", "purple", "cyan4"))

Gráfico de barras
(Bar plot)

Gráfico de barras (Bar plot)

  • Representa dados de duas colunas

  • Dados do tipo categóricos: X = categórico e Y = categórico

  • Resume dados de contagens para uma coluna

Gráfico de barras (Bar plot)

Tabela de Frequência

# numero de individuos coletados
penguins_count <- penguins %>%
  dplyr::count(species)
penguins_count
# A tibble: 3 × 2
  species       n
  <fct>     <int>
1 Adelie      152
2 Chinstrap    68
3 Gentoo      124

Gráfico de barras (Bar plot)

graphics

barplot(n ~ species,
        data = penguins_count, 
        col = c("darkorange", "purple", "cyan4"),
        main = "Número de indivíduos coletados por espécie",
        xlab = "Espécies",
        ylab = "Frequência absoluta",
        cex.main = 1.5,
        cex.lab = 1.3,
        cex.axis = 1.2)

Gráfico de barras (Bar plot)

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

Gráfico de barras (Bar plot)

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

Gráfico de barras (Bar plot)

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

Gráfico de barras (Bar plot)

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

Polêmica 2!!!

Gráfico de barras (Bar plot)

Gráfico dinamite (Dynamite plot)

Gráfico de barras (Bar plot)

Gráfico dinamite (Dynamite plot) - alternativas

Gráfico de barras (Bar plot)

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 de barras (Bar plot)

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

Gráfico de caixas
(Box plot)

Gráfico de caixas (Box plot)

  • 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

Gráfico de caixas (Box plot)

  • Intervalo inter-quartil (interquartile range - IQR)

  • Limite inferior e limite superipor (1.5 x IQR)

  • Valores exteriores (outliers)

Gráfico de caixas (Box plot)


Gráfico de caixas (Box plot)


Gráfico de caixas (Box plot)


Gráfico de caixas (Box plot)




Gráfico de caixas (Box plot)


Gráfico de caixas (Box plot)


Gráfico de caixas (Box plot)

graphics

boxplot(flipper_length_mm ~ as.factor(species),
        data = penguins,
        col = c("darkorange", "purple", "cyan4"),
        border = "black",
        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)

Gráfico de caixas (Box plot)

ggplot2

ggplot(data = penguins, 
       aes(x = species, y = flipper_length_mm, fill = species)) +
  geom_boxplot(width = .3, 
               show.legend = FALSE) +
  scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
  theme_bw(base_size = 15) +
  labs(x = "Species", y = "Flipper length (mm)")

Gráfico de caixas (Box plot)

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

Gráfico de caixas (Violin plot)

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

Gráfico de caixas (Box plot)

ggpubr

ggboxplot(data = penguins, 
          x = "species", 
          y = "flipper_length_mm",
          add = "jitter", 
          shape = "species",
          fill = "species",
          color = "black",
          palette = c("darkorange", "purple", "cyan4"),
          xlab = "Comprimento da nadadeira (mm)",
          ylab = "Frequência absoluta",
          legend = "none")

Gráfico de caixas (Violin plot)

ggpubr

ggviolin(data = penguins, 
         x = "species", 
         y = "flipper_length_mm",
         add = "jitter", 
         shape = "species",
         fill = "species",
         color = "black",
         palette = c("darkorange", "purple", "cyan4"),
         xlab = "Comprimento da nadadeira (mm)",
         ylab = "Frequência absoluta",
         legend = "none")

Gráfico de caixas (Rain plot)

ggdist

Gráfico de dispersão (Scatter plot)

Gráfico de dispersão (Scatter plot)

  • 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

Gráfico de dispersão (Scatter plot)

graphics

par(mar = c(5, 5, 1, 1))
plot(bill_depth_mm ~ bill_length_mm,
     data = penguins,
     pch = 20,
     cex = 1.5,
     xlab = "Comprimento do bico (mm)", 
     ylab = "Profundidade do bico (mm)",
     cex.lab = 1.5,
     cex.axis = 1.3,
     bty = "l")

Gráfico de dispersão (Scatter plot)

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

Gráfico de dispersão (Scatter plot)

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

Gráfico de dispersão (Scatter plot)

Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing

Justin Matejka, George Fitzmaurice

Gráfico de dispersão (Scatter plot)

ggplot2

# package
library(datasauRus)

# data + plot
datasaurus_dozen %>% 
  dplyr::filter(dataset == "dino") %>% 
  ggplot() +
  aes(x = x, y = y) +
  geom_point(colour = "black", fill = "black", 
             size = 5, alpha = .75, pch = 21) +
  theme_bw(base_size = 20)

Gráfico de dispersão (Scatter plot)

ggplot2

datasaurus_dozen %>% 
  ggplot() +
  aes(x = x, y = y) +
  geom_point(colour = "black", fill = "black", 
             size = 1, alpha = .75, pch = 21) +
  facet_wrap(~dataset) +
  theme_bw(base_size = 20)

Gráfico de dispersão (Scatter plot)

ggpubr

ggscatter(data = penguins,
          x = "flipper_length_mm", 
          y = "bill_depth_mm",
          color = "species",
          fill = "species",
          palette = c("darkorange", "purple", "cyan4"),
          shape = "species", 
          size = 5,
          xlab = "Comprimento do bico (mm)", 
          ylab = "Profundidade do bico (mm)")

Gráfico de dispersão (Scatter plot)

ggpubr

ggscatter(data = penguins,
          x = "flipper_length_mm", 
          y = "bill_depth_mm",
          color = "species",
          fill = "species",
          palette = c("darkorange", "purple", "cyan4"),
          shape = "species", 
          size = 5,
          xlab = "Comprimento do bico (mm)", 
          ylab = "Profundidade do bico (mm)",
          ellipse = TRUE, 
          mean.point = TRUE)

Gráfico de dispersão (Scatter plot)

ggpubr

ggscatter(data = datasaurus_dozen %>% 
            dplyr::filter(dataset == "dino"),
          x = "x", 
          y = "y",
          size = 5,
          xlab = "X", 
          ylab = "Y")

Gráfico de dispersão (Scatter plot)

ggpubr

ggscatter(data = datasaurus_dozen,
          x = "x", 
          y = "y",
          size = 1,
          xlab = "X", 
          ylab = "Y",
          facet.by = "dataset")

Gráfico pareado
(Pairs plot)

Gráfico pareado (Pairs plot)

  • 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

Gráfico pareado (Pairs plot)

graphics

penguins %>%
  dplyr::select(body_mass_g, ends_with("_mm")) %>%
  pairs(pch = 20,
        upper.panel = NULL)

Gráfico pareado (Pairs plot)

GGally

# pacote
# install.packages("GGally")
library(GGally)

penguins %>%
  dplyr::select(body_mass_g, ends_with("_mm")) %>%
  ggpairs() +
  theme_bw(base_size = 20)

Gráfico pareado (Pairs plot)

GGally

penguins %>%
  dplyr::select(species, sex, body_mass_g, ends_with("_mm")) %>%
  GGally::ggpairs(aes(color = species)) +
  scale_colour_manual(values = c("darkorange", "purple", "cyan4")) +
  scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
  theme_bw(base_size = 20)

Gráfico pareado (Pairs plot)

psych

# pacote
# install.packages("psych")
library(psych)

penguins %>%
  dplyr::select(body_mass_g, ends_with("_mm")) %>%
  pairs.panels(pch = 20, 
               ellipses = FALSE, 
               density = FALSE, 
               stars = TRUE, 
               hist.col = "gray",
               digits = 2,
               rug = FALSE,
               breaks = 10,
               ci = TRUE)

Combinando gráficos

Descrição

  • 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

Combinando gráficos

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)

Combinando gráficos

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)

Combinando gráficos

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

Combinando gráficos

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

Combinando gráficos

cowplot

# pacote
# install.packages("cowplot")
library(cowplot)

# combinacao horizontal
plot_grid(ggplot_boxplot, ggplot_scatterplot, 
          align = "h", rel_widths = c(1, 1.5),
          labels = "AUTO")

Combinando gráficos

cowplot

# combinacao vertical
plot_grid(ggplot_boxplot, ggplot_scatterplot, 
          ncol = 1, align = "v", 
          labels = "AUTO")

Combinando gráficos

patchwork

# pacote
# install.packages("patchwork")
library(patchwork)

# combinacao horizontal
ggplot_boxplot + ggplot_scatterplot

Combinando gráficos

patchwork

ggplot_boxplot / ggplot_scatterplot

Gráficos animados

Gráficos animados

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


Gráficos animados

gganimate

gganimate::anim_save(filename = "plot_animate.gif",
                     animation = plot_animate, wi = 700, he = 500, un = "px")

Gráficos interativos

Gráficos interativos

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

Gráficos interativos

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

Gráficos interativos

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

Gráficos interativos

plotly

# pacote
# install.packages("htmlwidgets")
library(htmlwidgets)

# export
htmlwidgets::saveWidget(widget = plot_penguins_scatter_int, 
                        file = "plot_penguins_scatter_int.html")

Gráficos usando interface

Gráficos usando interface

esquisse

# pacote
# install.packages("esquisse")
library(esquisse)

# iniciar
palmerpenguins::penguins %>% 
  na.omit() %>% 
  esquisse::esquisser()

Gráficos usando interface

esquisse - Shiny

Dúvidas?