# Biblioteca
library(ggplot2)

# Base de Dados
data(mtcars)
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
# Gráfico de dispersão
ggplot(data = 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 (wt)",
  y = "Consumo (mpg)",
  color = "Número de Cilindros"
) +
theme_minimal()

# Base de dados
data(diamonds)

# Gráfico de barras com ordenação decrescente
ggplot(diamonds, aes(x = cut, fill = cut)) +
  geom_bar() +
  geom_text(
    stat = "count",
    aes(label = ..count..),
    vjust = -0.3
  ) +
  scale_x_discrete(
    limits = names(sort(table(diamonds$cut), decreasing = TRUE))
  ) +
  scale_fill_brewer(palette = "RdBu") +
  labs(
    title = "Contagem de Diamantes por Tipo de Corte",
    x = "Tipo de Corte",
    y = "Quantidade de Diamantes"
  ) +
  theme_minimal()

# Base de dados
data(diamonds)

# Tradução dos níveis de corte
diamonds$cut <- factor(
  diamonds$cut,
  levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"),
  labels = c("Ruim", "Regular", "Bom", "Muito Bom", "Ótimo")
)

ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  scale_fill_manual(
    values = c(
      "Ruim" = "#d73027",
      "Regular" = "#fc8d59",
      "Bom" = "#fee090",
      "Muito Bom" = "#91bfdb",
      "Ótimo" = "#4575b4"
    )
  ) +
  labs(
    title = "Distribuição do Preço dos Diamantes por Tipo de Corte",
    x = "Tipo de Corte",
    y = "Preço"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

CONCEITOS FUNDAMENTAIS

Diferença entre geom_point() e geom_jitter()

Segundo a abordagem apresentada na apostila de Visualização de Dados, ambos os geoms são utilizados para representar dados individuais, porém possuem finalidades distintas.

geom_point()

Plota os pontos exatamente nas coordenadas reais dos dados.

É mais apropriado quando:

  • Há pouca sobreposição de observações
  • O objetivo é visualizar a posição exata dos pontos

Limitação:
Quando muitos pontos compartilham valores semelhantes, ocorre sobreposição, dificultando a análise visual.

geom_jitter()

É uma variação de geom_point() que adiciona um pequeno deslocamento aleatório aos pontos.

É mais apropriado quando:

  • Há alta concentração de observações
  • Deseja-se evidenciar a densidade dos dados

Vantagem:
Reduz a sobreposição e melhora a legibilidade da distribuição dos dados, especialmente em variáveis categóricas.


Conceito de Gramática dos Gráficos

A Gramática dos Gráficos é um conceito teórico que define a construção de gráficos como a combinação de componentes independentes, permitindo criar uma ampla variedade de visualizações a partir de regras bem definidas.

De acordo com a apostila de Visualização de Dados, essa gramática é composta, principalmente, por:

  • Dados (data)
  • Mapeamentos estéticos (aes)
  • Geometrias (geom_*)
  • Escalas (scale_*)
  • Sistemas de coordenadas
  • Temas (theme_*)

Implementação no ggplot2

O pacote ggplot2 implementa a Gramática dos Gráficos permitindo que o usuário construa visualizações de forma incremental, por meio do operador +.

Exemplo conceitual:

```r
ggplot(dados, aes(x, y)) +
geom_point() +
scale_y_continuous() +
theme_minimal()