Produzindo Gráficos com ggplot2

Gráficos
Linguagem R
ggplot2
Autor

Jeanne Franco

Data de Publicação

27 de abril de 2025

Aprendendo a produzir os principais gráficos com ggplot2

Vamos aprender a produzir os principais gráficos usando o pacote ggplot2 no software R. Os gráficos mais comuns são: barras, boxplot, histogramas e dispersão.

Podemos utilizar o banco de dados de pinguins. Esses dados estão disponível no pacote dados que foi criado para traduzir os principais conjunto dados utilizados no R, como os dados de plantas iris, os dados de carros mtcarros, dados diamante, entre outros.

Para ter acesso a esses dados traduzidos você pode utilizar a seguinte função install.packages para instalar o pacote dados, em seguida, você deve carregar o pacote utilizando a função library do R. Veja abaixo:

# Instalar pacote

## install.packages("dados")

# Carregar pacote

library(dados)

# Visualizar conjunto de dados disponíveis

head(dados::pinguins)
# A tibble: 6 × 8
  especie         ilha  comprimento_bico profundidade_bico comprimento_nadadeira
  <fct>           <fct>            <dbl>             <dbl>                 <int>
1 Pinguim-de-adé… Torg…             39.1              18.7                   181
2 Pinguim-de-adé… Torg…             39.5              17.4                   186
3 Pinguim-de-adé… Torg…             40.3              18                     195
4 Pinguim-de-adé… Torg…             NA                NA                      NA
5 Pinguim-de-adé… Torg…             36.7              19.3                   193
6 Pinguim-de-adé… Torg…             39.3              20.6                   190
# ℹ 3 more variables: massa_corporal <int>, sexo <fct>, ano <int>
head(dados::dados_iris)
  Comprimento.Sepala Largura.Sepala Comprimento.Petala Largura.Petala Especies
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
head(dados::mtcarros)
                  milhas_por_galao cilindros cilindrada cavalos_forca eixo
Mazda RX4                     21.0         6        160           110 3.90
Mazda RX4 Wag                 21.0         6        160           110 3.90
Datsun 710                    22.8         4        108            93 3.85
Hornet 4 Drive                21.4         6        258           110 3.08
Hornet Sportabout             18.7         8        360           175 3.15
Valiant                       18.1         6        225           105 2.76
                   peso velocidade forma transmissao marchas carburadores
Mazda RX4         2.620      16.46     0           1       4            4
Mazda RX4 Wag     2.875      17.02     0           1       4            4
Datsun 710        2.320      18.61     1           1       4            1
Hornet 4 Drive    3.215      19.44     1           0       3            1
Hornet Sportabout 3.440      17.02     0           0       3            2
Valiant           3.460      20.22     1           0       3            1

Após baixar o pacote dados, precisamos baixar o pacote tidyverse usado para manipulação e visualização de dados.

# Instalar pacote

## install.packages("tidyverse")

# Carregar pacote

library(tidyverse)

Agora vamos visualizar o conjunto de dados de pinguins e ver a estrutura desses dados como quais são as variáveis categóricas e numéricas. Você pode utilizar a função view para visuzalizar todo os dados em uma janela como a do Excel.

head(pinguins)
# A tibble: 6 × 8
  especie         ilha  comprimento_bico profundidade_bico comprimento_nadadeira
  <fct>           <fct>            <dbl>             <dbl>                 <int>
1 Pinguim-de-adé… Torg…             39.1              18.7                   181
2 Pinguim-de-adé… Torg…             39.5              17.4                   186
3 Pinguim-de-adé… Torg…             40.3              18                     195
4 Pinguim-de-adé… Torg…             NA                NA                      NA
5 Pinguim-de-adé… Torg…             36.7              19.3                   193
6 Pinguim-de-adé… Torg…             39.3              20.6                   190
# ℹ 3 more variables: massa_corporal <int>, sexo <fct>, ano <int>
glimpse(pinguins)
Rows: 344
Columns: 8
$ especie               <fct> Pinguim-de-adélia, Pinguim-de-adélia, Pinguim-de…
$ ilha                  <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torg…
$ comprimento_bico      <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34…
$ profundidade_bico     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18…
$ comprimento_nadadeira <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190,…
$ massa_corporal        <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 34…
$ sexo                  <fct> macho, fêmea, fêmea, NA, fêmea, macho, fêmea, ma…
$ ano                   <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, …
# Para visualizar todo conjunto de dados, use:

## view(pinguins)

Os dados acima tratam de medidas de tamanho de pinguins adultos forrageando perto da Estação Palmer, Antártica. Inclui medidas para espécies de pinguins, ilha no Arquipélago Palmer, tamanho (comprimento da nadadeira, massa corporal, dimensões do bico) e sexo.

Agora que conhecemos nosso conjunto de dados. Vamos produzir os principais gráficos usando o pacote ggplot2 presente no metapacote tidyverse.

Gráfico de Barras

# Manipular dados e calcular médias e erros-padrão

pinguins1 <- pinguins |>
  select(ilha, comprimento_nadadeira) |>
  drop_na() |>
  group_by(ilha) |>
  summarise(media = mean(comprimento_nadadeira),
            n = n(),
            sd = sd(comprimento_nadadeira),
            se = sqrt(sd)/n) 

# Produzir gráfico

g1 <- ggplot(pinguins1, aes(x = ilha, y = media)) +
  geom_col(width = 0.6, fill = "#69b3a2", color = "brown") +
  geom_errorbar(aes(ymax = media + sd,
                    ymin = media - sd),
                width = 0.1, size = 0.8) +
  labs(x = "Ilhas", y = "Comprimento de nadadeiras (mm)") +
  theme_light()

g1

Gráfico Box-plot

g2 <- ggplot(pinguins, aes(x = ilha, y = comprimento_nadadeira)) +
  geom_boxplot(width = 0.6, fill = "#69b3a2",
               color = "brown") +
  geom_jitter(alpha = 0.45) +
  labs(x = "Ilhas", y = "Comprimento de nadadeiras (mm)") +
  theme_light()

g2

Gráfico de Histograma

g3 <- ggplot(pinguins, aes(x = comprimento_nadadeira)) +
  geom_histogram(bins = 30, binwidth = 2,
                 fill = "#69b3a2",color = "brown") +
  labs(x = "Comprimento de nadadeiras (mm)",
       y = "Frequência", ) +
  theme_light()

g3

Gráfico de Dispersão

g4 <- ggplot(pinguins, aes(x = comprimento_nadadeira, 
                     y = massa_corporal)) +
  geom_point(size = 2.5, color = "#69b3a2") +
  geom_smooth(se = T, method = "lm", color = "brown") +
  labs(x = "Comprimento de nadadeiras (mm)",
       y = "Massa corporal (g)") +
  theme_light()

g4

Unindo os gráficos com o pacote patchwork

# Carregar pacote

library(patchwork)

# Unir gráficos

g1 + g2 + g3 + g4 &   
  
# O operador `&` garante que o tema será aplicado
# a todos os sub-plots
  
  theme(plot.background = element_rect(fill = "gray85"),
        panel.background = element_rect(fill = "gray85"),
        legend.background = element_rect(fill = "gray85")) 

Descrição das camadas:

  • Select: seleção das colunas de dados utilizados no gráfico;

  • Drop_na: exclusão de dados faltantes;

  • Group_by: grupo selecionado para calcular as médias, desvios e erros padrão por ilha;

  • Summarise: usado para fazer os cálculos das médias, desvios e erros padrão;

  • Ggplot: função para produção o gráfico do pacote ggplot2;

  • Aes: função usada para definição das variáveis X e Y;

  • Geom_col: função usada para definição do gráfico de colunas;

  • Geom_errobar: função usada para inserir as barras de desvio padrão;

  • Geom_boxplot: função usada para definição do gráfico de box-plot;

  • Geom_jitter: adiciona uma pequena quantidade de variação aleatória à localização de cada ponto definida pelo geom_point.

  • geom_histogram: função usada para definição do gráfico de histogramas;

  • Geom_point: função usada para definição do gráfico de dispersão;

  • Geom_smooth: exibe uma linha de tendência suavizada, usando o argumento method = "lm" é adicionada uma linha reta.

  • Labs: função usada para redefinir os nomes dos eixos X e Y;

  • Theme_light: função usada para definir o tipo de background do gráfico.