Este relatório apresenta a resolução do Exercício
1.1, focado na análise exploratória do conjunto de dados
mtcars. O objetivo é demonstrar a proficiência no uso do
pacote ggplot2 para visualização de dados veiculares.
O código abaixo gera a visualização solicitada, aplicando a distinção de cores por número de cilindros e utilizando uma estética minimalista para facilitar a leitura dos dados.
# Chamada do Dataset
data(mtcars)
# Criação do Gráfico
ggplot(data = mtcars) +
# Mapeamento das variáveis (Estética)
aes(x = wt, y = mpg, color = factor(cyl)) +
# Definição da Geometria (Pontos)
geom_point(size = 3) +
# Configuração dos Rótulos (Labels)
labs(
title = "Relação entre Peso e Consumo de Combustível",
subtitle = "Análise do dataset Motor Trend Car Road Tests",
x = "Peso do Carro (1000 lbs)",
y = "Milhas por Galão (mpg)",
color = "Cilindros",
caption = "Elaborado por: Heleno Costa"
) +
# Aplicação do Tema
theme_minimal()Figura 1: Relação Peso x Consumo x Cilindros
=====================================================================================================
Neste exercício, analisamos a distribuição dos diamantes de acordo
com a qualidade do corte (cut), utilizando o dataset
diamonds (com mais de 50.000 registros).
O objetivo é visualizar qual tipo de corte é mais frequente no mercado, ordenando os dados para facilitar a comparação imediata.
# Carregando o dataset
data(diamonds)
# Construção do Gráfico
ggplot(data = diamonds) +
# 1. ESTÉTICA
# No Eixo X, usamos 'fct_infreq' para ordenar as barras do maior para o menor
# O 'fill' colore as barras baseado no corte
aes(x = forcats::fct_infreq(cut), fill = cut) +
# 2. GEOMETRIA DE BARRAS
geom_bar() +
# 3. RÓTULOS DE VALOR (Item b)
# stat = "count": Pede para o geom_text calcular quantos são (igual o geom_bar faz)
# vjust = -0.5: Empurra o número um pouquinho para cima da barra
geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.5, size = 3.5) +
# 4. ESCALA DE CORES (Item c)
# Palette "Spectral" é uma paleta divergente famosa (Vermelho <-> Azul)
scale_fill_brewer(palette = "Spectral") +
# 5. RÓTULOS E TEMA
labs(
title = "Quantidade de Diamantes por Qualidade de Corte",
subtitle = "Ordenado por frequência (Decrescente)",
x = "Qualidade do Corte",
y = "Contagem Total",
fill = "Legenda"
) +
theme_minimal() +
# Removemos a legenda lateral pois a informação já está no eixo X (redundância)
theme(legend.position = "none")Figura 2: Contagem de Diamantes por Tipo de Corte
=====================================================================================================
Nesta etapa, analisamos como o preço dos diamantes varia dentro de cada categoria de corte. Utilizamos um Boxplot para visualizar a mediana, a dispersão dos dados e identificar valores atípicos (outliers).
A customização inclui o uso de cores específicas definidas manualmente e ajuste de tipografia nos eixos.
# Carregando dados (se necessário)
data(diamonds)
# Criação do Boxplot
ggplot(data = diamonds) +
# 1. ESTÉTICA
# X = Categoria, Y = Variável Numérica (Preço)
aes(x = cut, y = price, fill = cut) +
# 2. GEOMETRIA (Boxplot)
# outlier.alpha deixa os pontos fora da curva mais transparentes para não poluir
geom_boxplot(outlier.alpha = 0.3) +
# 3. CORES CUSTOMIZADAS (Item b)
# scale_fill_manual permite escolher a cor exata de cada barra.
# Aqui escolhi tons que vão do cinza (Fair) ao ouro (Ideal)
scale_fill_manual(values = c(
"Fair" = "#A9A9A9", # Cinza Escuro
"Good" = "#87CEFA", # Azul Claro
"Very Good" = "#4682B4", # Azul Aço
"Premium" = "#DAA520", # Goldenrod (Dourado escuro)
"Ideal" = "#FFD700" # Gold (Dourado Ouro)
)) +
# 4. RÓTULOS (Item a)
labs(
title = "Distribuição de Preços por Qualidade de Corte",
subtitle = "Visualização via Boxplot com cores personalizadas",
x = "Qualidade do Corte",
y = "Preço (USD)",
caption = "Nota: Os pontos pretos representam valores atípicos (outliers)."
) +
# 5. TEMA E AJUSTES FINAIS
theme_minimal() +
theme(
# Item (c): Remover a legenda (pois o eixo X já explica as cores)
legend.position = "none",
# Item (d): Ajuste do ângulo do eixo X
# angle = 45: Inclina o texto
# hjust = 1: Alinha o final da palavra com o traço do eixo (essencial para leitura)
axis.text.x = element_text(angle = 45, hjust = 1, size = 10)
)Figura 3: Variação de Preço conforme o Corte do Diamante
=====================================================================================================
Nesta seção, abordamos os conceitos teóricos que fundamentam a construção de gráficos no R.
geom_point() e
geom_jitter()Embora ambas as geometrias sejam utilizadas para criar gráficos de dispersão (scatter plots), elas possuem aplicações distintas relacionadas à natureza dos dados e à visualização da densidade.
A “Gramática dos Gráficos” (Grammar of Graphics) é uma estrutura
teórica que propõe que todo gráfico estatístico pode ser decomposto em
componentes semânticos independentes, que são combinados para formar a
visualização final. O ggplot2 implementa essa filosofia
através de um sistema de camadas (layers) adicionadas
sequencialmente com o operador +.
Os três componentes principais desta gramática são:
mtcars).Exemplo da estrutura: >
Gráfico = Dados + Estética + Geometria
Essa abordagem modular permite flexibilidade total: podemos alterar a geometria (de pontos para linhas) ou as variáveis estéticas sem precisar recriar o gráfico do zero, apenas alterando a camada correspondente.
O código abaixo compara a variável cyl (cilindros)
usando as duas abordagens. Note como o geom_jitter revela a
quantidade real de carros.
# Gráfico 1: geom_point (Sobreposição)
g1 <- ggplot(mtcars, aes(x = cyl, y = wt)) +
geom_point(size = 3, color = "red", alpha = 0.5) +
labs(title = "Com geom_point()", subtitle = "Muitos pontos escondidos") +
theme_bw()
g1# Gráfico 2: geom_jitter (Dispersão)
g2 <- ggplot(mtcars, aes(x = cyl, y = wt)) +
geom_jitter(size = 3, color = "blue", alpha = 0.5, width = 0.2) +
labs(title = "Com geom_jitter()", subtitle = "Visualização real da densidade") +
theme_bw()
g2