# 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 |
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()
# 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 |
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.
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)
)
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.
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.
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:
ggplot(data = ...)) [1].aes): O
mapeamento das variáveis dos dados para atributos visuais (eixo x, eixo
y, cor, tamanho) [1].geom): A
forma visual que representa os dados (pontos, barras, linhas) [2].