Logomarca da PMMG

Conhecendo a base de dados mtcars

Antes de apresentar a solução do exercício 1.1 seria interessante conhecer a base de dados que iremos trabalhar

# Exibir a estrutura (tipos de dados)
cat("### Estrutura do mtcars (str)\n")
## ### Estrutura do mtcars (str)
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
# Mostrar as primeiras linhas (usando kable para formatação de tabela)
cat("\n### Primeiras 6 Linhas do mtcars\n")
## 
## ### Primeiras 6 Linhas do mtcars
knitr::kable(head(mtcars))
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

Exercício 1.1 - Introdução ao ggplot2

O gráfico de dispersão abaixo visa analisar a relação entre o peso do veículo e o consumo de combustível (milhas por galão - MPG) no dataset mtcars. As cores representam o número de cilindros (cyl).

# Código para gerar o gráfico
ggplot(data = mtcars) +
  aes(x = wt, y = mpg, color = factor(cyl)) +
  geom_point(size = 3) + # Adicionado size=3 e color=factor(cyl) conforme requisitos
  labs(
    title = "Relação entre Peso e Consumo de Combustível",
    x = "Peso do Carro (milhares de lbs)",
    y = "Milhas por Galão (mpg)",
    color = "Cilindros"
  ) +
  theme_minimal()

Conhecendo a base de dados diamonds

# Exibir a estrutura (tipos de dados)
cat("### Estrutura do diamonds (str)\n")
## ### Estrutura do diamonds (str)
str(diamonds)
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
##  $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
# Mostrar as primeiras linhas
cat("\n### Primeiras 6 Linhas do diamonds\n")
## 
## ### Primeiras 6 Linhas do diamonds
knitr::kable(head(diamonds))
carat cut color clarity depth table price x y z
0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

Exercício 1.2 - Gráficos de Barras

O gráfico de barras abaixo mostra a contagem de diamantes por qualidade de corte (cut). As barras estão ordenadas de forma decrescente por frequência, facilitando a identificação dos cortes mais comuns.

Exercício 1.3 - Customização Avançada

O gráfico Boxplot a seguir exibe a distribuição de preços (price) em relação aos tipos de corte (cut). O gráfico utiliza cores customizadas, rótulos em português e o ajuste de ângulo do eixo X para melhor visualização.

# Criação do Boxplot com personalizações
ggplot(data = diamonds) +
  # Mapeamento das variáveis: x (categórica), y (contínua) e preenchimento (fill)
  aes(x = cut, y = price, fill = cut) +
  
  # Geometria: Boxplot para visualizar a distribuição e outliers
  geom_boxplot() +
  
  # (a) Títulos e rótulos em português
  labs(
    title = "Distribuição de Preço por Qualidade de Corte",
    subtitle = "Análise da variável 'price' pelo fator 'cut'",
    x = "Qualidade do Corte",
    y = "Preço (USD)"
  ) +
  
  # (b) Cores customizadas para cada categoria
  scale_fill_manual(values = c(
    "Fair" = "#E41A1C", 
    "Good" = "#377EB8", 
    "Very Good" = "#4DAF4A", 
    "Premium" = "#984EA3", 
    "Ideal" = "#FF7F00"
  )) +
  
  # Tema base para limpar o visual
  theme_minimal() +
  
  # Personalizações do Tema (Theme)
  theme(
    # (c) Remoção da legenda
    legend.position = "none",
    
    # (d) Ajuste do ângulo dos rótulos do eixo X para evitar sobreposição
    axis.text.x = element_text(angle = 45, hjust = 1)
  )


Exercício 1.4 - Conceitos Fundamentais

Questão: Explique a diferença entre os geoms geom_point() e geom_jitter(). Em que situação cada um é mais apropriado?

  • geom_point(): Esta função plota os pontos exatamente nas coordenadas definidas pelas variáveis. É a geometria padrão para gráficos de dispersão.
    • Quando usar: É mais apropriado quando precisamos de precisão exata na localização dos dados ou quando as variáveis são contínuas e não possuem valores repetidos (sobrepostos).
  • geom_jitter(): Esta função adiciona um pequeno ruído aleatório (“jitter”) à posição de cada ponto. Isso não altera os dados, apenas a visualização.
    • Quando usar: É essencial quando temos muitos pontos com os mesmos valores (sobreposição ou overplotting) ou quando trabalhamos com variáveis discretas/categóricas. O ruído ajuda a visualizar a densidade dos dados onde os pontos estariam uns sobre os outros.

Questão: Descreva o conceito de “Gramática dos Gráficos” e como ele é implementado no ggplot2.

O conceito, proposto por Leland Wilkinson, define que um gráfico não é apenas uma imagem única, mas uma construção feita pela combinação de componentes independentes, assim como uma frase é construída por regras gramaticais.

No pacote ggplot2, isso é implementado através de um sistema de camadas (layers). Para criar um gráfico, combinamos:

  1. Dados (Data): O conjunto de informações base (ggplot(data = ...)) [1].
  2. Estéticas (Aesthetics - aes): O mapeamento das variáveis dos dados para atributos visuais (eixo x, eixo y, cor, tamanho) [1].
  3. Geometrias (Geometries - geom): A forma visual que representa os dados (pontos, barras, linhas) [2].
  4. Camadas Adicionais:
    • Facetas: Divisão do gráfico em subgráficos [3].
    • Estatísticas: Transformações dos dados (como contagens em histogramas) [3].
    • Coordenadas: O sistema onde os dados são desenhados (cartesiano, polar) [3].
    • Tema: Elementos visuais não relacionados aos dados (fontes, fundo) [4].