Apresentação

Column

Sobre o Projeto

Objetivo Geral

Este dashboard foi desenvolvido como o artefato final das atividades de Análise Preditiva. O objetivo central transcende a simples plotagem de dados; visa demonstrar o domínio técnico sobre a ferramenta flexdashboard e a capacidade de customização avançada utilizando R Markdown.

A estrutura foi pensada para simular um ambiente de análise real aplicado ao contexto do 19º Batalhão da Polícia Militar (19º BPM), integrando visualizações estáticas (ggplot2) e interativas (plotly, crosstalk) em um layout responsivo e profissional.

Estrutura de Navegação

O painel está organizado em seções lógicas acessíveis pelo menu superior:

  • Metodologia: Detalha as ferramentas e processos de construção.
  • Questões Gerais: Agrupa os exercícios práticos (1.1, 1.2, 1.3) demonstrando diferentes tipos de visualização (Dispersão, Barras, Boxplots Interativos).
  • Conceitos Fundamentais: (Ex 1.4) Uma abordagem didática sobre a gramática dos gráficos e diferenças geométricas.

Column

Arquitetura Técnica e Customização

Customização via CSS

Para garantir que o dashboard não apenas funcione, mas também comunique profissionalismo, foi implementada uma folha de estilos personalizada (style.css). As principais alterações incluem:

  • Tipografia: Utilização da família de fontes Rawline e Segoe UI.
  • Identidade Visual: Aplicação das cores institucionais da PMMG (Vermelho #AB2328 e Cáqui #B3A369) nas barras de navegação, bordas e elementos de destaque.
  • Efeitos Visuais: Implementação de sombras (box-shadow) e efeitos de hover (3D lift e brilho) nos títulos dos gráficos para uma experiência de usuário moderna.

Metodologia

Column

Ferramentas e Recursos Utilizados

A construção deste painel seguiu um fluxo de trabalho iterativo, combinando programação estatística clássica com ferramentas modernas de assistência ao desenvolvimento.

Stack Tecnológico

  1. Linguagem R & RStudio: Base para todo o processamento de dados e geração de relatórios dinâmicos.
  2. Pacote flexdashboard: Utilizado como framework principal para o layout em colunas e abas (.tabset).
  3. Visualização de Dados:
    • ggplot2: Para criação de gráficos estáticos robustos e customizados.
    • plotly: Para converter gráficos estáticos em interativos.
    • crosstalk: Para implementação de filtros dinâmicos sem necessidade de servidor Shiny (Client-side interactivity).

Assistência de Inteligência Artificial

Para otimização do código, depuração de erros (debugging) e sugestões de design CSS, foram utilizadas ferramentas de IA Generativa: * Gemini (Google) e ChatGPT (OpenAI): Auxiliaram na estruturação do HTML, na lógica de seletores CSS complexos e na revisão da sintaxe do R Markdown.

Column

Referências e Design

Documentação Oficial

Todo o desenvolvimento foi estritamente baseado na documentação oficial do pacote, garantindo aderência às melhores práticas.

  • Fonte de Consulta: R Studio - Flexdashboard: Using flexdashboard
  • A análise dos exemplos da documentação permitiu a implementação correta de menus aninhados (data-navmenu), ícones (data-icon) e layouts de preenchimento vertical (vertical_layout: fill).

Identidade Visual (19º BPM)

O design foi concebido para refletir a sobriedade e o profissionalismo da instituição.

  • Paleta de Cores:
    • ■ Vermelho PMMG (#AB2328): Utilizado em destaques, barras ativas e elementos de atenção.
    • ■ Cáqui PMMG (#B3A369): Utilizado em bordas, detalhes secundários e no logo.
  • Logotipo: A inclusão do brasão do 19º BPM na barra de navegação personaliza o artefato para a Unidade de Execução Operacional (UEOp) do autor.

Gráfico de Dispersão (Ex 1.1)

Column

Interpretação da Relação Peso vs. Consumo

O Gráfico de Dispersão gerado revela uma forte correlação negativa entre o peso do veículo (wt) e a Milhas por Galão (mpg). Isso significa que, invariavelmente, veículos mais pesados tendem a ter uma eficiência de combustível significativamente menor.

Observações Segmentadas por Cilindros (cyl):

  1. Diferenciação Clara: Os dados estão perfeitamente agrupados de acordo com o número de cilindros (4, 6 e 8), reforçando que esta é a principal variável de influência na eficiência.
  2. 4 Cilindros (Verde): Correspondem aos veículos mais leves e mais econômicos, com a maior média de MPG.
  3. 8 Cilindros (Vermelho): Correspondem aos veículos mais pesados e menos econômicos, com a menor média de MPG.

Conclusão: O número de cilindros atua como um forte fator de estratificação. Para otimizar a eficiência de combustível, a redução no peso, especialmente na transição para um menor número de cilindros, é a alavanca mais eficaz.

Column

Gráfico de Dispersão

Código R Fonte Gráfico de Dispersão

# O código a seguir é a versão fonte original (Chart A) para referência.
# Este chunk tem eval=FALSE, ou seja, ele APENAS exibe o código, não o executa.

# OBJETIVO: Criar um gráfico de dispersão (mpg x wt), cor por cyl, com theme_minimal().

# Criando o gráfico de dispersão conforme as instruções
grafico_1 <- ggplot(data = mtcars) +
    # Mapeamento estético: X = peso, Y = milhas/galão, Cor = cilindros
    aes(x = wt, y = mpg, color = as.factor(cyl)) +
    # Geometria de dispersão (pontos)
    geom_point(size = 3) +
    # Customização de Títulos e Rótulos
    labs(
      title = "2.1 Relação entre Peso e Consumo de Combustível",
        subtitle = "Aumento de peso (wt) resulta em menor eficiência (mpg).",
        x = "Peso (1000 lbs)",
        y = "Milhas por Galão (mpg)",
        color = "Cilindros"
    ) +
    # Aplicação do tema minimalista
    theme_minimal() +
    theme(legend.position = "bottom") 

Gráficos de Barras (Ex 1.2)

Column

Estruturação de Gráficos de Barras

Importância da Ordenação

Em variáveis categóricas ordinais (como a qualidade cut), a ordem padrão alfabética muitas vezes confunde a análise.

Para uma visualização eficaz, é crucial ordenar as barras pela frequência (n). Isso permite identificar instantaneamente qual categoria é a mais predominante e qual a curva de distribuição dos dados.

Elementos Visuais

Nesta atividade, construímos o gráfico em 3 etapas progressivas: 1. Ordenação: Reordenar os fatores. 2. Rótulos: Adicionar o valor exato para leitura precisa. 3. Cores: Usar uma paleta divergente para destacar as diferenças.

Column

Passo A: Ordenação das Barras

Passo B: Adicionando Rótulos

Passo C: Paleta de Cores (Final)

Análise e Interpretação

O gráfico de barras finalizado permite as seguintes conclusões sobre a qualidade dos diamantes no dataset:

  1. Dominância do Corte Ideal: O corte de qualidade Ideal (azul escuro) domina amplamente o dataset com mais de 20.000 unidades. Isso indica uma forte prevalência de alta qualidade neste mercado específico.
  2. Ordem de Frequência: A ordenação visual (Ideal > Premium > Very Good > Good > Fair) mostra uma queda progressiva. Cortes de qualidade intermediária (Premium e Very Good) ainda são comuns.
  3. Escassez de Baixa Qualidade: Os cortes Good e Fair (tons avermelhados na paleta RdBu) representam a minoria absoluta. Isso sugere que pedras de baixa qualidade de corte são raras ou descartadas.

Customização Avançada (Ex 1.3)

Column

Customização Avançada

O Boxplot

O boxplot (diagrama de caixa) é uma ferramenta visual para interpretar a distribuição de dados numéricos. Ele exibe:

  1. Mediana: A linha central da caixa.
  2. Quartis: As bordas da caixa representam o 1º e 3º quartil (50% dos dados).
  3. Outliers: Pontos fora dos “bigodes” que indicam valores atípicos.

Dataset Diamonds

Utilizaremos o dataset diamonds contido no pacote ggplot2, analisando especificamente: * Price: Preço do diamante em dólares. * Cut: Qualidade do corte (Fair, Good, Very Good, Premium, Ideal).

Column

Títulos e Rótulos (PT-BR)

Cores Customizadas

Sem Legenda

Gráfico Final (Ajuste Eixo X)

Conceitos Fundamentais (Ex 1.4)

Column

Introdução aos Geoms de Dispersão

O Problema da Sobreposição (Overplotting)

Ao criar gráficos de dispersão com dados que possuem categorias discretas (como números inteiros de cilindros ou classes de veículos), é comum que muitos pontos caiam exatamente nas mesmas coordenadas x e y.

Isso cria um problema visual: você vê apenas um ponto, mas podem existir centenas ali.

A Solução: Jitter (Tremulação)

A diferença fundamental entre as funções reside em como elas tratam essa posição:

  1. geom_point(): Plota o ponto exatamente onde o dado diz. É preciso e exato.
  2. geom_jitter(): Adiciona um pequeno ruído aleatório (tremulação) aos dados antes de plotar. Isso “espalha” os pontos para que possamos ver a densidade real dos dados.

Column

Exemplo 1: geom_point() (Pontos Sobrepostos)

Exemplo 2: geom_jitter() (Pontos Espalhados)

geom_point()

Column

Definição da Função

Precisão Absoluta

A função geom_point() é o padrão geométrico para criar gráficos de dispersão (scatterplots).

Ela mapeia as variáveis estéticas x e y diretamente para a posição no plano cartesiano.

Principais Argumentos:

  • size: Tamanho do ponto.
  • shape: Formato do ponto (círculo, triângulo, quadrado).
  • color: Cor da borda ou preenchimento.
  • alpha: Transparência (útil quando há alguma sobreposição leve).

Column

Exemplo Prático

Quando Utilizar?

Situação Ideal

O geom_point() é a escolha correta quando:

  1. Variáveis Contínuas: Ambas as variáveis (X e Y) são contínuas e possuem muitas casas decimais (ex: 1.254, 1.255). Nesse caso, a sobreposição é rara.
  2. Precisão é Crítica: Quando a posição exata do ponto importa mais do que a visualização da densidade.
  3. Gráficos Resumo: Quando você está plotando médias ou estatísticas agregadas, onde cada ponto representa um grupo único.

geom_jitter()

Column

Definição da Função

Visualizando Densidade em Dados Discretos

A função geom_jitter() é um atalho conveniente para geom_point(position = "jitter").

Ela adiciona uma pequena quantidade de variação aleatória à localização de cada ponto. Isso é puramente visual; não altera os dados estatísticos subjacentes, mas melhora a interpretabilidade gráfica.

Controle: Você pode controlar a quantidade de espalhamento usando os argumentos width (largura) e height (altura).

Column

Exemplo Prático

Quando Utilizar?

Situação Ideal

O geom_jitter() deve ser utilizado quando:

  1. Variáveis Discretas ou Categóricas: Uma ou ambas as variáveis possuem poucos valores únicos (ex: notas 1 a 5, número de cilindros 4, 6, 8).
  2. Excesso de Sobreposição (Overplotting): Quando seu gráfico parece ter poucos pontos, mas seu dataset tem milhares de linhas.
  3. Análise de Distribuição: Quando você quer ter uma ideia visual da distribuição dos dados sem recorrer a um Boxplot ou Violino.

Gramática dos Gráficos

Column

A Gramática em Camadas (Layered Grammar)

O Conceito

O pacote ggplot2 é baseado na “Gramática dos Gráficos” (Leland Wilkinson). A ideia central é que você pode construir qualquer gráfico a partir dos mesmos componentes básicos:

  1. Data (Dados): O que você quer visualizar.
  2. Aesthetics (Estética - aes): O mapeamento dos dados para propriedades visuais (x, y, cor, tamanho).
  3. Geometries (Geometrias - geom): A forma visual (pontos, barras, linhas).
Camadas Adicionais

Além do básico, refinamos o gráfico com:

  • Facets: Dividir em sub-gráficos.
  • Statistics: Transformações estatísticas (médias, contagens).
  • Coordinates: O espaço onde o gráfico é desenhado.
  • Themes: A aparência não-relacionada aos dados (fontes, fundos).

Column

Exemplo Completo (Camadas)

Código Fonte Comentado

# Estrutura da Gramática dos Gráficos

ggplot(data = mpg) +  # 1. DADOS
  
  aes(x = displ, y = hwy, color = drv) + # 2. ESTÉTICA (Mapeamento Global)
  
  geom_jitter() + # 3. GEOMETRIA (Camada de Pontos)
  
  geom_smooth() + # 4. ESTATÍSTICA (Camada de Tendência)
  
  facet_wrap(~year) + # 5. FACETAS (Divisão de painéis)
  
  labs(...) + # 6. ANOTAÇÕES
  
  theme_bw() # 7. TEMA (Aparência)

Exemplo Extra 1 (Boxplot + Jitter)

Exemplo Extra 2 (Barras + Coords)

---
title: "Análise Preditiva do 19º BPM"
author: "3º Sgt Novais"
subtitle: "Layout Focado da Atividade 1"
output:
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    source_code: embed
    css: style.css
    # O logo precisa ser um caminho válido no servidor.
    logo: 'C:/Projetos_R/flaskdashboard/imgens/logo_pmmg_25mm.png'
    navbar:
      - { icon: "fa-whatsapp", href: "https://wa.me/5533999481310" }
      - { icon: "fa-instagram", href: "https://www.instagram.com/valfridonovais/" }
      - { icon: "fa-github", href: "https://github.com/ValfridoNovais" }
---

<script>
$(document).ready(function() {
  // Seleciona todos os links da barra de navegação que começam com "http"
  // e adiciona o atributo para abrir em nova aba
  $('.navbar-nav a[href^="http"]').attr('target', '_blank');
});
</script>

```{r setup, include=FALSE}
# Configuração de ambiente e carregamento de bibliotecas
library(flexdashboard)
library(tidyverse) # Fundamental para manipulação de dados e ggplot2
library(knitr) # Para formatação de tabelas e do relatório
library(scales) # Para formatar rótulos (usado no Ex 1.2)
library(leaflet)
library(crosstalk)
library(plotly)

# Configuração global para evitar quebra de linha longa em chunks de código
knitr::opts_chunk$set(tidy = FALSE, warning = FALSE, message = FALSE)

# Dados do mtcars para o Ex 1.1
data(mtcars)
```


Apresentação {data-navmenu="INTRODUÇÃO" data-navmenu-icon="fa-list" data-icon="fa-home"}
=====================================

Column {data-width=500}
-----------------------------------------------------------------------

### Sobre o Projeto

#### **Objetivo Geral**

Este dashboard foi desenvolvido como o artefato final das atividades de Análise Preditiva. O objetivo central transcende a simples plotagem de dados; visa demonstrar o **domínio técnico sobre a ferramenta `flexdashboard`** e a capacidade de customização avançada utilizando R Markdown.

A estrutura foi pensada para simular um ambiente de análise real aplicado ao contexto do **19º Batalhão da Polícia Militar (19º BPM)**, integrando visualizações estáticas (`ggplot2`) e interativas (`plotly`, `crosstalk`) em um layout responsivo e profissional.

#### **Estrutura de Navegação**

O painel está organizado em seções lógicas acessíveis pelo menu superior:

* **Metodologia:** Detalha as ferramentas e processos de construção.
* **Questões Gerais:** Agrupa os exercícios práticos (1.1, 1.2, 1.3) demonstrando diferentes tipos de visualização (Dispersão, Barras, Boxplots Interativos).
* **Conceitos Fundamentais:** (Ex 1.4) Uma abordagem didática sobre a gramática dos gráficos e diferenças geométricas.

Column {data-width=500 .tabset}
-----------------------------------------------------------------------

### Arquitetura Técnica e Customização

#### **Customização via CSS**

Para garantir que o dashboard não apenas funcione, mas também comunique profissionalismo, foi implementada uma folha de estilos personalizada (`style.css`). As principais alterações incluem:

* **Tipografia:** Utilização da família de fontes `Rawline` e `Segoe UI`.
* **Identidade Visual:** Aplicação das cores institucionais da PMMG (Vermelho `#AB2328` e Cáqui `#B3A369`) nas barras de navegação, bordas e elementos de destaque.
* **Efeitos Visuais:** Implementação de sombras (box-shadow) e efeitos de hover (3D lift e brilho) nos títulos dos gráficos para uma experiência de usuário moderna.

### **Comportamento de Links (JavaScript)**

Foi injetado um script `jQuery` no cabeçalho do documento com o objetivo de melhorar a usabilidade da barra de navegação (`navbar`).

#### **Nota Técnica sobre Publicação:**

> O script foi desenhado para forçar que links externos (WhatsApp, Instagram, GitHub) abram em novas abas (`target="_blank"`).
>
> Contudo, observa-se que, ao realizar a publicação via **RPubs**, essa funcionalidade pode ser restringida devido às políticas de segurança de *iframes* e *sandboxing* da plataforma, que muitas vezes bloqueiam a execução de scripts que manipulam janelas do navegador. Em ambiente local ou servidor próprio, a funcionalidade opera plenamente.

Metodologia {data-navmenu="INTRODUÇÃO" data-navmenu-icon="fa-list" data-icon="fa-cogs"}
=====================================

Column {data-width=500}
-----------------------------------------------------------------------

### Ferramentas e Recursos Utilizados

A construção deste painel seguiu um fluxo de trabalho iterativo, combinando programação estatística clássica com ferramentas modernas de assistência ao desenvolvimento.

#### **Stack Tecnológico**

1.  **Linguagem R & RStudio:** Base para todo o processamento de dados e geração de relatórios dinâmicos.
2.  **Pacote `flexdashboard`:** Utilizado como framework principal para o layout em colunas e abas (`.tabset`).
3.  **Visualização de Dados:**
    * `ggplot2`: Para criação de gráficos estáticos robustos e customizados.
    * `plotly`: Para converter gráficos estáticos em interativos.
    * `crosstalk`: Para implementação de filtros dinâmicos sem necessidade de servidor Shiny (Client-side interactivity).

#### **Assistência de Inteligência Artificial**

Para otimização do código, depuração de erros (debugging) e sugestões de design CSS, foram utilizadas ferramentas de IA Generativa:
* **Gemini (Google) e ChatGPT (OpenAI):** Auxiliaram na estruturação do HTML, na lógica de seletores CSS complexos e na revisão da sintaxe do R Markdown.

Column {data-width=500}
-----------------------------------------------------------------------

### Referências e Design

#### **Documentação Oficial**

Todo o desenvolvimento foi estritamente baseado na documentação oficial do pacote, garantindo aderência às melhores práticas.

* **Fonte de Consulta:** [R Studio - Flexdashboard: Using flexdashboard](https://rstudio.github.io/flexdashboard/articles/using.html)
* A análise dos exemplos da documentação permitiu a implementação correta de menus aninhados (`data-navmenu`), ícones (`data-icon`) e layouts de preenchimento vertical (`vertical_layout: fill`).

#### **Identidade Visual (19º BPM)**

O design foi concebido para refletir a sobriedade e o profissionalismo da instituição.

* **Paleta de Cores:**
    * <span style="color: #AB2328; font-weight: bold;">■ Vermelho PMMG (#AB2328)</span>: Utilizado em destaques, barras ativas e elementos de atenção.
    * <span style="color: #B3A369; font-weight: bold;">■ Cáqui PMMG (#B3A369)</span>: Utilizado em bordas, detalhes secundários e no logo.
* **Logotipo:** A inclusão do brasão do 19º BPM na barra de navegação personaliza o artefato para a Unidade de Execução Operacional (UEOp) do autor.

Gráfico de Dispersão (Ex 1.1){data-navmenu="QUESTÕES GERAIS" data-navmenu-icon="fa-list" data-icon="fa-check"}
=====================================

Column {data-width=350}
-----------------------------------------------------------------------

### **Interpretação da Relação Peso vs. Consumo** {data-heigth=100}

O [Gráfico de Dispersão](#grafico_dispersao) gerado revela uma **forte correlação negativa** entre o peso do veículo (`wt`) e a Milhas por Galão (`mpg`). Isso significa que, invariavelmente, veículos mais pesados tendem a ter uma eficiência de combustível significativamente menor.

### **Observações Segmentadas por Cilindros (`cyl`):** {data-heigth=900}

1.  **Diferenciação Clara:** Os dados estão perfeitamente agrupados de acordo com o número de cilindros (4, 6 e 8), reforçando que esta é a principal variável de influência na eficiência.
2.  **4 Cilindros (Verde):** Correspondem aos veículos mais leves e mais econômicos, com a maior média de MPG.
3.  **8 Cilindros (Vermelho):** Correspondem aos veículos mais pesados e menos econômicos, com a menor média de MPG.

**Conclusão:** O número de cilindros atua como um forte fator de estratificação. Para otimizar a eficiência de combustível, a redução no peso, especialmente na transição para um menor número de cilindros, é a alavanca mais eficaz.

Column {data-width=650 .tabset}
-------------------------------------

### Gráfico de Dispersão

```{r ex_1_1}
# OBJETIVO: Criar um gráfico de dispersão (mpg x wt), cor por cyl, com theme_minimal().

# Criando o gráfico de dispersão conforme as instruções
grafico_1 <- ggplot(data = mtcars) +
    # Mapeamento estético: X = peso, Y = milhas/galão, Cor = cilindros
    aes(x = wt, y = mpg, color = as.factor(cyl)) +
    # Geometria de dispersão (pontos)
    geom_point(size = 3) +
    # Customização de Títulos e Rótulos
    labs(
        title = "2.1 Relação entre Peso e Consumo de Combustível",
        subtitle = "Aumento de peso (wt) resulta em menor eficiência (mpg).",
        x = "Peso (1000 lbs)",
        y = "Milhas por Galão (mpg)",
        color = "Cilindros"
    ) +
    # Aplicação do tema minimalista
    theme_minimal() +
    theme(legend.position = "bottom") 

# PLOTANDO O GRÁFICO 
grafico_1
```

### Código R Fonte Gráfico de Dispersão

```{r eval=FALSE, echo=TRUE}
# O código a seguir é a versão fonte original (Chart A) para referência.
# Este chunk tem eval=FALSE, ou seja, ele APENAS exibe o código, não o executa.

# OBJETIVO: Criar um gráfico de dispersão (mpg x wt), cor por cyl, com theme_minimal().

# Criando o gráfico de dispersão conforme as instruções
grafico_1 <- ggplot(data = mtcars) +
    # Mapeamento estético: X = peso, Y = milhas/galão, Cor = cilindros
    aes(x = wt, y = mpg, color = as.factor(cyl)) +
    # Geometria de dispersão (pontos)
    geom_point(size = 3) +
    # Customização de Títulos e Rótulos
    labs(
      title = "2.1 Relação entre Peso e Consumo de Combustível",
        subtitle = "Aumento de peso (wt) resulta em menor eficiência (mpg).",
        x = "Peso (1000 lbs)",
        y = "Milhas por Galão (mpg)",
        color = "Cilindros"
    ) +
    # Aplicação do tema minimalista
    theme_minimal() +
    theme(legend.position = "bottom") 
```
    
<!--INICIO DA SEGUNDA PÁGINA DO QUESTÕES GERAIS-->

Gráficos de Barras (Ex 1.2) {data-navmenu="QUESTÕES GERAIS" data-navmenu-icon="fa-list" data-icon="fa-check"}
=====================================

Column {data-width=350}
----------------------------------------------------------------------- 

### Estruturação de Gráficos de Barras

#### **Importância da Ordenação**

Em variáveis categóricas ordinais (como a qualidade `cut`), a ordem padrão alfabética muitas vezes confunde a análise. 

Para uma visualização eficaz, é crucial ordenar as barras pela frequência (`n`). Isso permite identificar instantaneamente qual categoria é a mais predominante e qual a curva de distribuição dos dados.

#### **Elementos Visuais**

Nesta atividade, construímos o gráfico em 3 etapas progressivas:
1.  **Ordenação:** Reordenar os fatores.
2.  **Rótulos:** Adicionar o valor exato para leitura precisa.
3.  **Cores:** Usar uma paleta divergente para destacar as diferenças.

Column {data-width=650 .tabset}
----------------------------------------------------------------------- 

### Passo A: Ordenação das Barras

```{r ex_1_2_a}
# PREPARAÇÃO DOS DADOS
library(forcats) # Pacote para manipular fatores

# Criando dataframe com contagem e reordenando o fator 'cut'
diamonds_ordered <- diamonds %>%
  count(cut) %>%
  mutate(cut = fct_reorder(cut, n, .desc = TRUE))

# PLOT A: Apenas barras ordenadas
ggplot(data = diamonds_ordered, aes(x = cut, y = n)) +
  geom_bar(stat = "identity", fill = "gray70") + # Cor neutra inicial
  labs(
    title = "Passo A: Barras Ordenadas",
    subtitle = "Ordenação decrescente por frequência",
    x = "Qualidade do Corte",
    y = "Contagem"
  ) +
  theme_minimal()
```

### Passo B: Adicionando Rótulos

```{r ex_1_2_b}
library(scales) # Para formatar números (comma)

# PLOT B: Adicionando geom_text
ggplot(data = diamonds_ordered, aes(x = cut, y = n)) +
  geom_bar(stat = "identity", fill = "gray70") +
  
  # Adicionando os Rótulos
  geom_text(aes(label = comma(n)), 
            vjust = -0.5,     # Move o texto para cima da barra
            size = 4, 
            fontface = "bold") +
            
  labs(
    title = "Passo B: Inserção de Rótulos",
    subtitle = "Facilitando a leitura exata dos valores",
    x = "Qualidade do Corte",
    y = "Contagem"
  ) +
  theme_minimal()
```

### Passo C: Paleta de Cores (Final)

```{r ex_1_2_c}
# PLOT C: Aplicando Paleta Brewer 'RdBu'
ggplot(data = diamonds_ordered, aes(x = cut, y = n, fill = cut)) +
  geom_bar(stat = "identity") +
  
  geom_text(aes(label = comma(n)), 
            vjust = -0.5, size = 4, fontface = "bold") +
  
  # APLICAÇÃO DA PALETA DIVERGENTE SOLICITADA
  scale_fill_brewer(palette = "RdBu", guide = "none") +
  
  labs(
    title = "Contagem de Diamantes por Qualidade do Corte",
    subtitle = "Gráfico Final: Ordenado, Rotulado e Colorido",
    x = "Qualidade do Corte",
    y = "Contagem de Diamantes (n)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"))
```

### Análise e Interpretação

O gráfico de barras finalizado permite as seguintes conclusões sobre a qualidade dos diamantes no dataset:

1.  **Dominância do Corte Ideal:** O corte de qualidade `Ideal` (azul escuro) domina amplamente o dataset com mais de 20.000 unidades. Isso indica uma forte prevalência de alta qualidade neste mercado específico.
2.  **Ordem de Frequência:** A ordenação visual (`Ideal > Premium > Very Good > Good > Fair`) mostra uma queda progressiva. Cortes de qualidade intermediária (`Premium` e `Very Good`) ainda são comuns.
3.  **Escassez de Baixa Qualidade:** Os cortes `Good` e `Fair` (tons avermelhados na paleta RdBu) representam a minoria absoluta. Isso sugere que pedras de baixa qualidade de corte são raras ou descartadas.



Customização Avançada (Ex 1.3) {data-navmenu="QUESTÕES GERAIS" data-navmenu-icon="fa-list" data-icon="fa-check"}
=====================================

Column {data-width=350}
-----------------------------------------------------------------------

### Customização Avançada

#### **O Boxplot**

O boxplot (diagrama de caixa) é uma ferramenta visual para interpretar a distribuição de dados numéricos. Ele exibe:

1.  **Mediana:** A linha central da caixa.
2.  **Quartis:** As bordas da caixa representam o 1º e 3º quartil (50% dos dados).
3.  **Outliers:** Pontos fora dos "bigodes" que indicam valores atípicos.

#### **Dataset Diamonds**

Utilizaremos o dataset `diamonds` contido no pacote `ggplot2`, analisando especificamente:
* **Price:** Preço do diamante em dólares.
* **Cut:** Qualidade do corte (Fair, Good, Very Good, Premium, Ideal).

Column {data-width=650 .tabset}
-------------------------------------

### Títulos e Rótulos (PT-BR)

```{r}
# Gráfico simples com rótulos traduzidos
ggplot(diamonds, aes(x = cut, y = price)) +
  geom_boxplot() +
  labs(
    title = "Preço dos Diamantes por Tipo de Corte",
    subtitle = "Análise exploratória inicial",
    x = "Qualidade do Corte",
    y = "Preço (USD)"
  )
```

### Cores Customizadas

```{r}
# Adicionando cores personalizadas (fill)
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  labs(
    title = "Preço por Corte (Com Cores)",
    x = "Qualidade do Corte",
    y = "Preço (USD)"
  ) +
  scale_fill_manual(values = c(
    "Fair" = "#E69F00",      # Laranja
    "Good" = "#56B4E9",      # Azul Claro
    "Very Good" = "#009E73", # Verde
    "Premium" = "#F0E442",   # Amarelo
    "Ideal" = "#0072B2"      # Azul Escuro
  ))
```

### Sem Legenda

```{r}
# Removendo a legenda redundante
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  labs(
    title = "Preço por Corte (Sem Legenda)",
    x = "Qualidade do Corte",
    y = "Preço (USD)"
  ) +
  scale_fill_manual(values = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2")) +
  theme(legend.position = "none") # Remove a legenda
```

### Gráfico Final (Ajuste Eixo X)

```{r}
# Ajustando o ângulo do texto do eixo X
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  labs(
    title = "Análise Final: Distribuição de Preços",
    subtitle = "Ajuste de ângulo nos rótulos",
    x = "Qualidade do Corte",
    y = "Preço (USD)",
    caption = "Fonte: Dataset Diamonds (ggplot2)"
  ) +
  scale_fill_manual(values = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2")) +
  theme_minimal() + # Aplicando um tema limpo
  theme(
    legend.position = "none",
    axis.text.x = element_text(angle = 45, hjust = 1, face = "bold") # Rotaciona 45 graus
  )
```

Conceitos Fundamentais (Ex 1.4) {data-navmenu="CONCEITOS FUNDAMENTAIS" data-navmenu-icon="fa-list" data-icon="fa-check"}
=====================================

Column {data-width=500}
-----------------------------------------------------------------------

### Introdução aos Geoms de Dispersão

#### O Problema da Sobreposição (Overplotting)

Ao criar gráficos de dispersão com dados que possuem categorias discretas (como números inteiros de cilindros ou classes de veículos), é comum que muitos pontos caiam exatamente nas mesmas coordenadas `x` e `y`.

Isso cria um problema visual: **você vê apenas um ponto**, mas podem existir centenas ali.

##### A Solução: Jitter (Tremulação)

A diferença fundamental entre as funções reside em como elas tratam essa posição:

1.  **geom_point():** Plota o ponto exatamente onde o dado diz. É preciso e exato.
2.  **geom_jitter():** Adiciona um pequeno ruído aleatório (tremulação) aos dados antes de plotar. Isso "espalha" os pontos para que possamos ver a densidade real dos dados.

Column {data-width=500}
-----------------------------------------------------------------------

### Exemplo 1: geom_point() (Pontos Sobrepostos)

```{r}
ggplot(mpg, aes(x = cyl, y = hwy)) +
  geom_point(size = 3, alpha = 0.5, color = "#AB2328") +
  labs(
    title = "Cilindros vs Eficiência na Estrada",
    subtitle = "Muitos pontos estão escondidos uns atrás dos outros",
    x = "Número de Cilindros",
    y = "Milhas por Galão (Rodovia)"
  ) +
  theme_minimal()
```

### Exemplo 2: geom_jitter() (Pontos Espalhados)

```{r}
ggplot(mpg, aes(x = cyl, y = hwy)) +
  geom_jitter(size = 3, alpha = 0.5, color = "#B3A369", width = 0.2) +
  labs(
    title = "Cilindros vs Eficiência na Estrada",
    subtitle = "O Jitter revela a verdadeira quantidade de dados",
    x = "Número de Cilindros",
    y = "Milhas por Galão (Rodovia)"
  ) +
  theme_minimal()
```


geom_point() {data-navmenu="CONCEITOS FUNDAMENTAIS" data-navmenu-icon="fa-list" data-icon="fa-bullseye"}
=====================================

Column {data-width=350}
-----------------------------------------------------------------------

### Definição da Função

#### Precisão Absoluta

A função `geom_point()` é o padrão geométrico para criar gráficos de dispersão (scatterplots).

Ela mapeia as variáveis estéticas `x` e `y` diretamente para a posição no plano cartesiano.

**Principais Argumentos:**

* `size`: Tamanho do ponto.
* `shape`: Formato do ponto (círculo, triângulo, quadrado).
* `color`: Cor da borda ou preenchimento.
* `alpha`: Transparência (útil quando há alguma sobreposição leve).

Column {data-width=650 .tabset}
-----------------------------------------------------------------------

### Exemplo Prático

```{r}
# Exemplo usando dataset diamonds para ver relação contínua
ggplot(diamonds[1:200,], aes(x = carat, y = price, color = cut)) +
  geom_point(size = 3) +
  labs(title = "Relação Quilates x Preço") +
  theme_light()
```

### Quando Utilizar?

#### Situação Ideal

O `geom_point()` é a escolha correta quando:

1.  **Variáveis Contínuas:** Ambas as variáveis (X e Y) são contínuas e possuem muitas casas decimais (ex: 1.254, 1.255). Nesse caso, a sobreposição é rara.
2.  **Precisão é Crítica:** Quando a posição exata do ponto importa mais do que a visualização da densidade.
3.  **Gráficos Resumo:** Quando você está plotando médias ou estatísticas agregadas, onde cada ponto representa um grupo único.


geom_jitter() {data-navmenu="CONCEITOS FUNDAMENTAIS" data-navmenu-icon="fa-list" data-icon="fa-random"}
=====================================

Column {data-width=350}
-----------------------------------------------------------------------

### Definição da Função

#### Visualizando Densidade em Dados Discretos

A função `geom_jitter()` é um atalho conveniente para `geom_point(position = "jitter")`.

Ela adiciona uma pequena quantidade de variação aleatória à localização de cada ponto. Isso é puramente visual; não altera os dados estatísticos subjacentes, mas melhora a interpretabilidade gráfica.

**Controle:**
Você pode controlar a quantidade de espalhamento usando os argumentos `width` (largura) e `height` (altura).

Column {data-width=650 .tabset}
-----------------------------------------------------------------------

### Exemplo Prático

```{r}
# Exemplo com dados discretos (classe do carro)
ggplot(mpg, aes(x = class, y = hwy, color = class)) +
  geom_jitter(width = 0.2, height = 0, size = 2, alpha = 0.7) +
  labs(title = "Consumo por Classe de Veículo") +
  theme_light() +
  theme(legend.position = "none")
```

### Quando Utilizar?

#### Situação Ideal

O `geom_jitter()` deve ser utilizado quando:

1.  **Variáveis Discretas ou Categóricas:** Uma ou ambas as variáveis possuem poucos valores únicos (ex: notas 1 a 5, número de cilindros 4, 6, 8).
2.  **Excesso de Sobreposição (Overplotting):** Quando seu gráfico parece ter poucos pontos, mas seu dataset tem milhares de linhas.
3.  **Análise de Distribuição:** Quando você quer ter uma ideia visual da distribuição dos dados sem recorrer a um Boxplot ou Violino.


Gramática dos Gráficos {data-navmenu="CONCEITOS FUNDAMENTAIS" data-navmenu-icon="fa-list" data-icon="fa-layer-group"}
=====================================

Column {data-width=500}
-----------------------------------------------------------------------

### A Gramática em Camadas (Layered Grammar)

#### O Conceito

O pacote `ggplot2` é baseado na "Gramática dos Gráficos" (Leland Wilkinson). A ideia central é que você pode construir qualquer gráfico a partir dos mesmos componentes básicos:

1.  **Data (Dados):** O que você quer visualizar.
2.  **Aesthetics (Estética - aes):** O mapeamento dos dados para propriedades visuais (x, y, cor, tamanho).
3.  **Geometries (Geometrias - geom):** A forma visual (pontos, barras, linhas).

##### Camadas Adicionais

Além do básico, refinamos o gráfico com:

* **Facets:** Dividir em sub-gráficos.
* **Statistics:** Transformações estatísticas (médias, contagens).
* **Coordinates:** O espaço onde o gráfico é desenhado.
* **Themes:** A aparência não-relacionada aos dados (fontes, fundos).

Column {data-width=500 .tabset}
-----------------------------------------------------------------------

### Exemplo Completo (Camadas)

```{r}
# Construindo um gráfico complexo camada por camada
ggplot(data = mpg) + 
  # Camada Estética (Mapeamento)
  aes(x = displ, y = hwy, color = drv) +
  # Camada Geométrica 1 (Pontos)
  geom_jitter(width = 0.1) +
  # Camada Geométrica 2 (Linha de tendência suave)
  geom_smooth(method = "lm", se = FALSE) +
  # Camada de Facetas (Dividir por ano)
  facet_wrap(~year) +
  # Camada de Etiquetas/Títulos
  labs(title = "Eficiência do Motor por Tração e Ano",
       subtitle = "Aplicando múltiplas camadas da gramática",
       x = "Cilindrada", y = "Milhas/Galão") +
  # Camada de Tema
  theme_bw()
```

### Código Fonte Comentado

```r
# Estrutura da Gramática dos Gráficos

ggplot(data = mpg) +  # 1. DADOS
  
  aes(x = displ, y = hwy, color = drv) + # 2. ESTÉTICA (Mapeamento Global)
  
  geom_jitter() + # 3. GEOMETRIA (Camada de Pontos)
  
  geom_smooth() + # 4. ESTATÍSTICA (Camada de Tendência)
  
  facet_wrap(~year) + # 5. FACETAS (Divisão de painéis)
  
  labs(...) + # 6. ANOTAÇÕES
  
  theme_bw() # 7. TEMA (Aparência)
```

### Exemplo Extra 1 (Boxplot + Jitter)

```{r}
# Combinando duas geometrias para máxima informação
ggplot(mpg, aes(x = class, y = hwy, fill = class)) +
  geom_boxplot(alpha = 0.3, outlier.shape = NA) + # Oculta outliers do boxplot
  geom_jitter(width = 0.2, alpha = 0.5) + # Mostra todos os pontos
  labs(title = "Combinação de Geometrias", subtitle = "Boxplot (Resumo) + Jitter (Dados Brutos)") +
  theme_minimal() +
  theme(legend.position = "none", axis.text.x = element_text(angle = 45, hjust = 1))
```

### Exemplo Extra 2 (Barras + Coords)

```{r}
# Mudando o sistema de coordenadas
ggplot(mpg, aes(x = class, fill = manufacturer)) +
  geom_bar() + # Geometria de barra (usa stat de contagem padrão)
  coord_polar() + # Muda para coordenadas polares
  labs(title = "Coordenadas Polares (Coxcomb)", subtitle = "Mudando apenas a camada de Coordenadas") +
  theme_void() # Tema vazio para limpar eixos
```