Inicio / Trilha 2 / Modulo 2.2
MODULO 2.2

πŸ“ˆ Graficos e Visualizacoes

Tipos de graficos, bibliotecas como Chart.js e ApexCharts, e quando usar cada visualizacao para comunicar dados efetivamente.

πŸ“š
6
Topicos
⏱️
60min
Duracao
πŸ“Š
Intermediario
Nivel
🎯
Pratico
Tipo
1

🎯 Quando Usar Cada Tipo de Grafico

Escolha certa para cada dado

Cada tipo de grafico serve para um proposito especifico. Graficos de linha mostram tendencias, barras comparam categorias, pizza mostra proporcoes. Escolher o tipo errado pode distorcer completamente a mensagem dos dados.

O grafico errado pode levar a interpretacoes equivocadas. Um grafico de pizza com 15 fatias e ilegivel. Um grafico de linha para dados categoricos nao faz sentido. A escolha correta comunica instantaneamente.

πŸ“‹ Guia de Selecao de Graficos

πŸ“ˆ
Tendencia no tempo
Evolucao de valores
Linha, Area
πŸ“Š
Comparar categorias
Qual e maior/menor
Barra
πŸ₯§
Parte do todo
Proporcoes (max 5 categorias)
Pizza, Donut
🎯
Progresso vs Meta
Quanto falta atingir
Gauge, Progress
πŸ”΅
Correlacao
Relacao entre variaveis
Scatter Plot
πŸ—ΊοΈ
Dados geograficos
Por regiao/pais
Mapa, Choropleth

⚠️ Regras de Ouro

❌ Nunca Faca
  • β€’ Pizza com mais de 5 fatias
  • β€’ 3D em qualquer grafico (distorce)
  • β€’ Eixo Y nao comecando em zero (barras)
  • β€’ Cores aleatorias sem significado
βœ… Sempre Faca
  • β€’ Linha pode ter eixo Y truncado
  • β€’ Menos e mais - remova elementos desnecessarios
  • β€’ Titulo claro explicando o grafico
  • β€’ Cores consistentes = significados consistentes

πŸ’‘ Dica Pratica

Teste do relance: Se alguem nao conseguir entender a mensagem principal do seu grafico em 5 segundos olhando rapidamente, ele precisa ser simplificado ou o tipo esta errado.

2

πŸ“¦ Chart.js - Setup e Configuracao

A biblioteca mais popular para graficos web

Chart.js e a biblioteca de graficos mais popular para web. Leve (~60KB), responsiva, animada e com 8 tipos de graficos nativos. Perfeita para dashboards por ser simples de configurar e altamente customizavel.

E o padrao da industria para graficos em dashboards. Documentacao excelente, comunidade ativa e compativel com qualquer framework (React, Vue, Angular, vanilla JS).

βš–οΈ Comparacao de Bibliotecas

Biblioteca Tamanho Melhor Para Curva
Chart.js ~60KB Dashboards gerais Facil
ApexCharts ~450KB Graficos interativos Media
D3.js ~240KB Visualizacoes custom Dificil
Recharts ~150KB React apps Facil

πŸ’» Codigo: Setup Basico Chart.js

<!-- 1. Incluir Chart.js via CDN -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<!-- 2. Canvas para o grafico -->
<div class="bg-dark-800 rounded-xl p-6 border border-dark-600">
  <canvas id="myChart" class="w-full" style="height: 300px"></canvas>
</div>

<!-- 3. Configuracao do Grafico -->
<script>
const ctx = document.getElementById('myChart');

new Chart(ctx, {
  type: 'line',  // bar, pie, doughnut, radar, polarArea...
  data: {
    labels: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun'],
    datasets: [{
      label: 'Vendas 2024',
      data: [12000, 19000, 15000, 22000, 18000, 25000],
      borderColor: '#3b82f6',
      backgroundColor: 'rgba(59, 130, 246, 0.1)',
      tension: 0.4,    // curva suave
      fill: true,       // preencher area
      pointRadius: 4,
      pointHoverRadius: 6
    }]
  },
  options: {
    responsive: true,
    maintainAspectRatio: false,
    plugins: {
      legend: { display: false },
      tooltip: {
        backgroundColor: '#1f2937',
        titleColor: '#f3f4f6',
        bodyColor: '#9ca3af',
        borderColor: '#374151',
        borderWidth: 1
      }
    },
    scales: {
      y: {
        beginAtZero: true,
        grid: { color: '#374151' }
      },
      x: {
        grid: { display: false }
      }
    }
  }
});
</script>

πŸ’‘ Dica Pratica

Mantenha consistencia: Configure os defaults do Chart.js uma vez no inicio do projeto. Assim todos os graficos terao o mesmo estilo automaticamente, sem precisar repetir configuracoes.

3

πŸ“‰ Graficos de Linha e Area

Tendencias ao longo do tempo

Graficos de linha mostram tendencias ao longo do tempo. Graficos de area sao linhas com preenchimento, uteis para mostrar volume ou valores acumulados.

90% dos dashboards precisam mostrar "como algo mudou ao longo do tempo". Vendas mensais, usuarios ativos, temperatura - tudo e tendencia. Dominar graficos de linha e fundamental.

πŸ” Anatomia do Grafico de Linha

        Titulo do Grafico
    β”‚
100 ─                    ●────  Tooltip (hover)
 80 ─         β•±β•²        β•±
 60 ─    β•±β•²  β•±  β•²      β•±       ← Linha principal
 40 ─   β•±  β•²β•±    β•²    β•±
 20 ─  β•±          ╲──╱         ← Area preenchida
  0 ┼──┬──┬──┬──┬──┬──┬──
     J  F  M  A  M  J  J        ← Eixo X (tempo)
         ↑
     Eixo Y (valores)

Elementos:
β€’ Linha: dados principais (destaque)
β€’ Pontos: valores individuais (opcional)
β€’ Grid: linhas de referencia (discretas)
β€’ Eixo Y: escala (PODE truncar em linhas)
β€’ Eixo X: tempo ou categorias ordenadas
β€’ Area: preenchimento para volume
β€’ Legenda: necessaria se multiplas series

🎨 Variacoes de Graficos de Linha

Linha Simples

Uma serie de dados, foco na tendencia.

tension: 0.4, fill: false
Area Preenchida

Enfatiza volume/magnitude dos valores.

tension: 0.4, fill: true
Multiplas Linhas

Comparar series. Max 4-5 linhas.

datasets: [{...}, {...}]
Area Empilhada

Mostra composicao do total ao longo do tempo.

stacked: true

πŸ’» Codigo: Linha com Multiplas Series

new Chart(ctx, {
  type: 'line',
  data: {
    labels: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun'],
    datasets: [
      {
        label: 'Vendas 2024',
        data: [12, 19, 15, 22, 18, 25],
        borderColor: '#3b82f6',
        backgroundColor: 'rgba(59, 130, 246, 0.1)',
        tension: 0.4,
        fill: true,
        borderWidth: 3  // linha principal mais grossa
      },
      {
        label: 'Vendas 2023',
        data: [10, 15, 12, 18, 14, 20],
        borderColor: '#6b7280',
        borderDash: [5, 5],  // linha tracejada
        tension: 0.4,
        fill: false,
        borderWidth: 2
      }
    ]
  },
  options: {
    plugins: {
      legend: {
        position: 'top',
        labels: { color: '#9ca3af' }
      }
    }
  }
});

βœ… Fazer vs ❌ Evitar

βœ… Fazer
  • β€’ Maximo 4-5 linhas por grafico
  • β€’ Linha principal mais grossa
  • β€’ Cores distintas e acessiveis
  • β€’ Truncar eixo Y para destacar variacoes
❌ Evitar
  • β€’ 10+ linhas sobrepostas
  • β€’ Cores muito similares
  • β€’ Pontos muito grandes
  • β€’ Linha para dados nao-temporais
4

πŸ“Š Graficos de Barra e Histogramas

Comparacao entre categorias

Graficos de barra comparam valores entre categorias. Barras verticais para poucas categorias, horizontais para muitas ou labels longos. Histogramas mostram distribuicao de frequencia.

Comparacao e essencial em dashboards. "Qual produto vende mais?", "Qual regiao performa melhor?". Barras respondem essas perguntas instantaneamente.

πŸ“ Vertical vs Horizontal

Barras Verticais
 100 ─ β–ˆβ–ˆ
  75 ─ β–ˆβ–ˆ β–ˆβ–ˆ
  50 ─ β–ˆβ–ˆ β–ˆβ–ˆ β–ˆβ–ˆ
  25 ─ β–ˆβ–ˆ β–ˆβ–ˆ β–ˆβ–ˆ β–ˆβ–ˆ
   0 ┼──┴──┴──┴──┴──
      A  B  C  D

Melhor para: poucas categorias (4-8), labels curtos, foco na altura.

Barras Horizontais
Produto Alpha β”‚β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ”‚
 Produto Beta β”‚β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ”‚
Produto Gamma β”‚β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ”‚
Produto Delta β”‚β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ”‚

Melhor para: muitas categorias, labels longos, ranking/ordenacao.

πŸ’» Codigo: Grafico de Barras Horizontal

new Chart(ctx, {
  type: 'bar',
  data: {
    labels: ['Produto A', 'Produto B', 'Produto C', 'Produto D'],
    datasets: [{
      label: 'Vendas',
      data: [120, 190, 80, 140],
      backgroundColor: [
        'rgba(59, 130, 246, 0.8)',   // azul
        'rgba(16, 185, 129, 0.8)',   // verde
        'rgba(245, 158, 11, 0.8)',   // amarelo
        'rgba(139, 92, 246, 0.8)'    // roxo
      ],
      borderRadius: 8,
      borderSkipped: false
    }]
  },
  options: {
    indexAxis: 'y',  // horizontal (remover para vertical)
    plugins: {
      legend: { display: false }
    },
    scales: {
      x: {
        beginAtZero: true,  // SEMPRE comece em zero!
        grid: { color: '#374151' }
      },
      y: {
        grid: { display: false }
      }
    }
  }
});

⚠️ Regra Critica: Comece em Zero!

❌ Eixo truncado (enganoso)
98 β”€β–ˆβ–ˆ
97 β”€β–ˆ
96 β”€β–ˆ
   A  B

Parece que A e 100% maior que B

βœ… Eixo comecando em 0
100β”€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
 50β”€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
  0─
   A  B

Mostra diferenca real de ~2%

5

πŸ₯§ Graficos de Pizza e Donut

Proporcoes de um todo

Graficos de pizza e donut mostram proporcoes de um todo. Donut e preferido por permitir colocar informacao no centro. Limitados a maximo 5 categorias para serem efetivos.

Proporcoes sao frequentes: market share, distribuicao de vendas, alocacao de orcamento. Mas pizza e frequentemente mal usado - saber quando NAO usar e tao importante quanto saber usar.

🎯 Quando Usar (e Quando NAO Usar)

βœ… Use Quando
  • β€’ Partes de um todo = 100%
  • β€’ 2-5 categorias apenas
  • β€’ Uma fatia e claramente dominante
  • β€’ Comparacao exata nao e necessaria
❌ NAO Use Quando
  • β€’ Mais de 5 categorias
  • β€’ Fatias de tamanho muito similar
  • β€’ Comparacao precisa necessaria
  • β€’ Dados temporais (use linha)

βš–οΈ Donut vs Pizza

🍩
Donut (Recomendado)

Centro util para KPI principal ou total. Mais moderno visualmente.

πŸ₯§
Pizza

Centro desperdicado. Use apenas se realmente precisar mostrar "fatias".

πŸ’» Codigo: Donut com Centro Customizado

new Chart(ctx, {
  type: 'doughnut',
  data: {
    labels: ['Desktop', 'Mobile', 'Tablet'],
    datasets: [{
      data: [55, 35, 10],
      backgroundColor: [
        '#3b82f6',  // azul
        '#10b981',  // verde
        '#f59e0b'   // amarelo
      ],
      borderWidth: 0,
      cutout: '70%'  // tamanho do buraco central
    }]
  },
  options: {
    plugins: {
      legend: {
        position: 'bottom',
        labels: { color: '#9ca3af', padding: 20 }
      }
    }
  }
});

// Para adicionar texto no centro, use plugin ou HTML overlay

πŸ’‘ Dica Pratica

Alternativa mais eficiente: Considere usar barras horizontais ordenadas em vez de pizza. Barras sao mais precisas para comparacao e funcionam com qualquer numero de categorias.

6

🎨 Estilizacao e Temas para Graficos

Consistencia visual em dark mode

Estilizar graficos significa adapta-los ao design system do dashboard: cores, fontes, bordas, sombras. Inclui configurar temas claros e escuros, tooltips customizados e animacoes.

Graficos com estilo padrao quebram a harmonia visual. Um grafico branco num dashboard dark mode e jarring. Consistencia visual aumenta a confianca e profissionalismo.

🎨 Paleta de Cores para Dashboards

#3b82f6
Primary
#10b981
Success
#f59e0b
Warning
#ef4444
Danger
#8b5cf6
Info
#6b7280
Neutral

πŸ’» Codigo: Tema Dark Mode Global

// Configurar ANTES de criar qualquer grafico
// Isso define o tema para TODOS os graficos

// Cores de texto e linhas
Chart.defaults.color = '#9ca3af';           // texto neutro
Chart.defaults.borderColor = '#374151';     // linhas de grid

// Tipografia
Chart.defaults.font.family = "'Inter', sans-serif";
Chart.defaults.font.size = 12;

// Tooltips customizados
Chart.defaults.plugins.tooltip.backgroundColor = '#1f2937';
Chart.defaults.plugins.tooltip.titleColor = '#f3f4f6';
Chart.defaults.plugins.tooltip.bodyColor = '#9ca3af';
Chart.defaults.plugins.tooltip.borderColor = '#374151';
Chart.defaults.plugins.tooltip.borderWidth = 1;
Chart.defaults.plugins.tooltip.padding = 12;
Chart.defaults.plugins.tooltip.cornerRadius = 8;
Chart.defaults.plugins.tooltip.displayColors = true;

// Animacoes (opcional - desativar para performance)
Chart.defaults.animation.duration = 750;
Chart.defaults.animation.easing = 'easeOutQuart';

// Paleta padrao de cores
const chartColors = {
  primary: '#3b82f6',
  success: '#10b981',
  warning: '#f59e0b',
  danger: '#ef4444',
  info: '#8b5cf6',
  neutral: '#6b7280'
};

πŸ’¬ Exemplo: Tooltip Dark Mode

Marco 2024
Vendas: R$ 45.230
Meta: R$ 50.000

Tooltip com fundo escuro, bordas sutis e cores consistentes

πŸ’‘ Dica Pratica

Crie um arquivo de configuracao: Coloque todos os defaults do Chart.js em um arquivo separado (ex: chart-theme.js) e importe antes de criar qualquer grafico. Isso garante consistencia automatica em todo o dashboard.

πŸ“ Resumo do Modulo

βœ“
Selecao de Graficos - Linha para tendencias, barra para comparacao, pizza para proporcoes
βœ“
Chart.js Setup - Biblioteca leve, responsiva e customizavel
βœ“
Graficos de Linha - Tendencias, multiplas series, area preenchida
βœ“
Graficos de Barra - Vertical vs horizontal, sempre comece em zero
βœ“
Pizza e Donut - Maximo 5 categorias, donut preferido
βœ“
Estilizacao - Temas dark mode, paleta consistente, tooltips customizados