---
title: "Visualização de Dados - Trabalho Final"
author: "Lucas Júlio das Neves"
date: "11 de Dezembro de 2025"
output: 
  html_document:
    theme: readable
    highlight: tango
    code_folding: show
---

UDI: 17ª RPM

1 Questões Gerais - Dashboard

Relatório de Análise de Dados

1.1 - Introdução ao ggplot2

# Gráfico de dispersão
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 3) +
  labs(
    title = "Relação entre Peso e Consumo de Combustível",
    x = "Peso do Carro (milhares de libras)",
    y = "Milhas por Galão (mpg)",
    color = "Número de Cilindros"
  ) +
  theme_minimal()

🔍 Análise do Gráfico:

O gráfico de dispersão revela uma forte correlação negativa entre o peso do veículo e sua eficiência energética. Observa-se que:

  • Veículos com 8 cilindros (pontos vermelhos) concentram-se na região de maior peso e menor eficiência

  • Carros com 4 cilindros (pontos azuis) são mais leves e apresentam melhor desempenho energético

  • A dispersão dos pontos segue um padrão linear descendente, indicando que o peso explica grande parte da variação no consumo

Logo, este resultado era esperado, pois veículos mais pesados requerem mais energia para se movimentar, especialmente em acelerações.

1.2 - Gráfico de Barras

# 1. Preparar os dados: contar e ordenar
dados_ordenados <- diamonds %>%
  count(cut) %>%
  arrange(desc(n)) %>%
  mutate(cut = factor(cut, levels = cut))

# 2. Criar o gráfico
ggplot(dados_ordenados, aes(x = cut, y = n, fill = cut)) +
  geom_bar(stat = "identity") +  # Barras
  geom_text(aes(label = n), vjust = -0.5, size = 4) +  # Rótulos
  labs(
    title = "Contagem de Diamantes por Corte",
    x = "Tipo de Corte",
    y = "Número de Diamantes"
  ) +
  scale_fill_brewer(palette = "Spectral") +  # Paleta divergente
  theme_minimal() +
  theme(legend.position = "none")  # Remove legenda

🔍 Análise do Gráfico: A distribuição de diamantes por qualidade de corte mostra um padrão interessante:

  • Predominância do corte “Ideal”: Com 21.551 unidades, representa aproximadamente 40% do total de diamantes na base

  • Distribuição desigual: Enquanto “Ideal” e “Premium” somam quase 66% dos diamantes, o corte “Fair” (Regular) representa apenas 3%

Portanto, este gráfico sugere que o mercado de diamantes privilegia cortes de alta qualidade, possivelmente devido à preferência dos consumidores ou à rentabilidade para joalherias.

1.3 - Customização Avançada

# 1. Criar dataset com tradução
diamonds_pt <- diamonds %>%
  mutate(cut_pt = factor(cut,
    levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"),
    labels = c("Regular", "Bom", "Muito Bom", "Premium", "Ideal")
  ))

# 2. Criar o boxplot com personalizações
ggplot(diamonds_pt, aes(x = cut_pt, y = price, fill = cut_pt)) +
  geom_boxplot() +
  labs(
    title = "Distribuição de Preços por Qualidade de Corte",
    x = "Qualidade do Corte",
    y = "Preço (US$)"
  ) +
  scale_fill_manual(values = c(
    "Regular" = "#E74C3C",
    "Bom" = "#3498DB", 
    "Muito Bom" = "#2ECC71",
    "Premium" = "#F1C40F",
    "Ideal" = "#9B59B6"
  )) +
  theme_minimal() +
  theme(
    legend.position = "none",  # Remove legenda
  # AJUSTE DO ÂNGULO DOS RÓTULOS DO EIXO X - MELHORADO
    axis.text.x = element_text(
      angle = 0,               # Ângulo de 0 graus
      hjust = 1,                # Alinhamento horizontal
      vjust = 1,                # Alinhamento vertical
      size = 11,                # Tamanho da fonte
      face = "bold",            # Negrito
      margin = margin(t = 5)    # Espaçamento superior
    ),
  )

🔍 Análise do Gráfico:

O boxplot da distribuição de preços revela um paradoxo interessante:

  • Preço vs Qualidade inversos: Diamantes de corte “Ideal” (roxo) têm a mediana de preço mais baixa (≈US$ 1.818), enquanto “Regular” (vermelho) apresenta a maior mediana (≈US$ 3.287)

  • Grande variabilidade: Todos os grupos apresentam outliers de alto valor, indicando a presença de diamantes excepcionais em cada categoria

Logo, a qualidade do corte não é o principal determinante do preço. Fatores como quilate, cor e pureza provavelmente têm maior impacto. Diamantes de corte “Regular” podem ser mais raros ou ter outras características que elevam seu valor.

1.4 - Conceitos Fundamentais

Questão 1: Diferença entre geom_point() e geom_jitter()

geom_point() plota os pontos exatamente nas coordenadas especificadas pelos dados. É mais apropriado quando:

  • A posição exata dos dados é importante para a interpretação
  • Não há sobreposição significativa de pontos (overplotting)
  • Exemplos: gráficos de dispersão com dados contínuos, séries temporais

geom_jitter() adiciona um pequeno ruído aleatório (jitter) à posição dos pontos. É mais apropriado quando:

  • Muitos pontos compartilham as mesmas coordenadas exatas
  • Há sobreposição que dificulta ver a distribuição real
  • Exemplos: dados categóricos, variáveis discretas, escalas Likert

Exemplo visual da diferença:

Questão 2: Gramática dos Gráficos e implementação no ggplot2

Conceito de “Gramática dos Gráficos”

A Gramática dos Gráficos, proposta por Leland Wilkinson, é um sistema estruturado para construir visualizações de dados através de componentes básicos que se combinam de forma consistente, similar a uma linguagem gramatical. O objetivo é fornecer uma estrutura teórica para descrever e construir gráficos de maneira sistemática.

Implementação no ggplot2

No pacote ggplot2 do R, desenvolvido por Hadley Wickham, a Gramática dos Gráficos é implementada através de sete componentes principais:

  1. Dados (Data): Conjunto de dados a ser visualizado

    ggplot(data = dados, ...)
  2. Mapeamentos Estéticos (Aesthetics): Como variáveis são mapeadas para propriedades visuais

    aes(x = variavel_x, y = variavel_y, color = categoria)
  3. Objetos Geométricos (Geoms): Formas visuais que representam os dados

    geom_point()   # Pontos
    geom_bar()     # Barras
    geom_line()    # Linhas
  4. Transformações Estatísticas (Stats): Cálculos sobre os dados antes do plot

    stat_smooth()  # Suavização
    stat_summary() # Sumarização
  5. Sistemas de Coordenadas (Coordinates): Como as posições são mapeadas no plano

    coord_cartesian()  # Cartesianas (padrão)
    coord_polar()      # Polares (gráfico de pizza)
    coord_flip()       # Inverte eixos
  6. Facetas (Facets): Cria múltiplos painéis por variáveis categóricas

    facet_wrap(~categoria)   # Painéis em grade
    facet_grid(linha~coluna) # Grade com duas dimensões
  7. Temas (Themes): Elementos não relacionados aos dados

    theme_minimal()    # Tema minimalista
    theme_bw()         # Preto e branco
    theme()            # Personalização completa

Síntese da abordagem no ggplot2

A implementação segue o princípio de composição por camadas, onde cada componente é adicionado com o operador +:

ggplot(data, aes(x, y, color = grupo)) +  # Dados + estéticas
  geom_point() +                         # Geometria
  stat_smooth(method = "lm") +           # Estatística
  facet_wrap(~grupo) +                   # Facetas
  coord_cartesian() +                    # Coordenadas
  theme_minimal() +                      # Tema
  labs(title = "Meu Gráfico")            # Rótulos

Esta abordagem permite construir gráficos complexos de forma incremental, mantendo consistência e flexibilidade, alinhando-se perfeitamente com os princípios da Gramática dos Gráficos.


Referência: WICKHAM, H. ggplot2: Elegant Graphics for Data Analysis. Springer, 2016.