# Pacotes
library(ggplot2)
library(dplyr)
library(forcats)
library(patchwork)

Atividades propostas


1. Introdução ao ggplot2


Carregue o dataset mtcars e crie um gráfico de dispersão (scatter plot) entre as variáveis mpg (milhas por galão) e wt (peso do carro). Adicione ao gráfico os itens: (a) Título: ”Relação entre Peso e Consumo de Combustível”
(b) Rótulos dos eixos X e Y
(c) Cor diferenciada por número de cilindros (cyl)
(d) Tema theme minimal()

Dica: Use ggplot(data = mtcars) + aes(x = wt, y = mpg) + geom point()

# Gráfico de dispersão
ggplot(data = mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 3, shape=18) +
  labs(
    title = "Gráfico: Relação entre Peso e Consumo de Combustível",
    x = "Peso do carro (wt)",
    y = "Milhas por galão (mpg)",
    color = "Cilindros (cyl)"
  ) +
  theme_minimal()
Análise Visual: Através do gráfico de dispersão, observa-se uma correlação negativa entre o peso do veículo e sua eficiência energética: à medida que o peso (eixo X) aumenta, as milhas por galão (eixo Y) diminuem de forma consistente. Adicionalmente, nota-se que veículos com 8 cilindros (em azul) concentram-se na faixa de maior peso e menor eficiência, enquanto os de 4 cilindros são mais leves e econômicos.

2. Gráficos de Barras


Utilizando o dataset diamonds, crie um gráfico de barras mostrando a contagem de diamantes por corte (cut).

Questão: Modifique o gráfico para:
(a) Ordenar as barras em ordem decrescente
(b) Adicionar rótulos de valor em cada barra
(c) Utilizar uma paleta de cores divergente

Dica: Use geom bar() e scale fill brewer()

# Preparação dos dados
dados <- diamonds %>%
  mutate(
    cut = factor(
      cut,
      levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"),
      labels = c("Regular", "Bom", "Muito Bom", "Premium", "Ideal")
    )
  )

# Gráfico de barras
ggplot(dados, aes(x = fct_infreq(cut), fill = cut)) +
  geom_bar(width = 0.7) + 
  geom_text(
    stat = "count", 
    aes(label = ..count..), 
    vjust = -0.5, 
    size = 4
  ) +
  labs(
    title = "Gráfico: Contagem de Diamantes por Tipo de Corte",
    x = "Tipo de Corte",
    y = "Contagem"
  ) +
  scale_fill_brewer(palette = "RdYlGn") + 
  theme_minimal()
Análise Visual: A representação por barras, ordenada de forma decrescente, permite identificar instantaneamente que o corte “Ideal” é a categoria predominante no conjunto de dados, seguida pelo corte “Premium”. A utilização da paleta divergente RdYlGn (do vermelho ao verde) facilita a associação visual entre a cor e a qualidade do corte. Segundo os princípios da Gestalt (proximidade e semelhança), a organização das barras auxilia o leitor a comparar as magnitudes sem esforço cognitivo excessivo.

3. Customização Avançada


Crie um boxplot da variável price por cut no dataset diamonds. Personalize o gráfico com:

(a) Títulos e rótulos em português
(b) Cores customizadas para cada categoria
(c) Remoção da legenda (se desnecessária)
(d) Ajuste do ângulo dos rótulos do eixo X

dados <- diamonds %>%
  mutate(
    cut = factor(
      cut,
      levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"),
      labels = c("Regular", "Bom", "Muito Bom", "Premium", "Ideal")
    )
  )
# Boxplot do preço por tipo de corte
ggplot(dados, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot(outlier.size = 1, outlier.alpha = 0.2, color = "#444444") +
  stat_summary(fun = "mean", geom = "point", shape = 23, size = 2, fill = "white") +
  labs(
    title = "Gráfico: Preço dos Diamantes por Tipo de Corte",
    x = "Tipo de Corte",
    y = "Preço em Dólares (US$)"
  ) +
  scale_fill_manual(
    values = c(
      "Regular" = "#A0A0A0",
      "Bom"     = "#708090",
      "Muito Bom" = "#4682B4",
      "Premium" = "#1F4E79",
      "Ideal"   = "#002060"
    )
  ) +
  theme_light() + 
  theme(
    legend.position = "none",
    axis.text.x = element_text(angle = 30, hjust = 1, size = 10),
    panel.grid.major.x = element_blank()
  )
Análise Visual: O gráfico de boxplot revela a dispersão dos preços em relação à qualidade do corte. Um ponto de destaque é a inclusão da média aritmética (representada pelos losangos brancos), que em todas as categorias se posiciona acima da mediana (linha central do box), indicando uma assimetria positiva nos dados. Nota-se também uma grande quantidade de outliers em todos os grupos, sugerindo que, embora o corte influencie o valor, existem diamantes com preços excepcionalmente elevados independentemente da categoria técnica de lapidação.

4. Conceitos Fundamentais


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

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

Questão 1

Diferença Técnica e Aplicabilidade

  • geom_point(): Plota os dados em sua posição exata. É a escolha ideal para variáveis contínuas onde a precisão da coordenada é vital. No entanto, sofre com o overplotting (sobreposição), onde pontos com valores idênticos se escondem atrás de outros.
  • geom_jitter(): Adiciona um pequeno ruído aleatório (deslocamento) horizontal e vertical. É preferível quando trabalhamos com variáveis categóricas ou dados discretos, pois permite visualizar a densidade de pontos em uma mesma categoria.

Exemplo Comparativo com diamonds:

p1 <- ggplot(diamonds, aes(x = cut, y = price)) +
  geom_point(alpha = 0.3) +
  labs(subtitle = "geom_point() Note a sobreposição vertical") +
  theme_minimal()

p2 <- ggplot(diamonds, aes(x = cut, y = price)) +
  geom_jitter(alpha = 0.3, width = 0.2, color = "darkblue") +
  labs(subtitle = "geom_jitter() Revela a dispersão dos dados") +
  theme_minimal()

p1 + p2

Questão 2

Fundamentação Teórica

A Gramática dos Gráficos, proposta por Leland Wilkinson, é a espinha dorsal do ggplot2. Ela não foca no “nome” do gráfico (barra, pizza, linha), mas nos elementos que o compõem. No R, isso é implementado através do empilhamento de camadas independentes unidas pelo operador +.

Os 7 Pilares da Gramática:


1. Data (Dados): O objeto (data.frame) que contém as informações.
2. Aesthetics (Mapeamento): Define como as variáveis “vestem” o gráfico (X, Y, cor, tamanho).
3. Geometries (Geometrias): A forma física da representação (pontos, barras, linhas).
4. Statistics (Estatísticas): Transformações aplicadas aos dados (contagens, médias).
5. Scales (Escalas): Controlam como os valores numéricos viram cores ou posições no eixo.
6. Coordinates (Coordenadas): O sistema de visualização (Cartesiano ou Polar).
7. Themes (Temas): Elementos estéticos não-dados (fundo, fontes, margens).

Exemplo de Construção por Camadas:

# Demonstração da lógica de camadas
ggplot(data = mtcars) + # 1. Dado
  aes(x = wt, y = mpg, color = factor(cyl)) + # 2. Mapeamento
  geom_point() + # 3. Geometria
  geom_smooth(method = "lm", se = FALSE) + # 4. Estatística (Regressão)
  labs(title = "Aplicação da Gramática das Camadas") + # 5. Escala/Rótulo
  theme_light() # 6. Tema