Instale a skill CLI belt: npx skills add belt-sh/cli
Visualização de Dados
Crie visualizações de dados claras e eficazes via CLI inference.sh.
Início Rápido
Requer a CLI do inference.sh (belt). Instruções de instalação
belt login
belt app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nmonths = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\"]\nrevenue = [42, 48, 55, 61, 72, 89]\n\nfig, ax = plt.subplots(figsize=(10, 6))\nax.bar(months, revenue, color=\"#3b82f6\", width=0.6)\nax.set_ylabel(\"Revenue ($K)\")\nax.set_title(\"Monthly Revenue Growth\", fontweight=\"bold\")\nfor i, v in enumerate(revenue):\n ax.text(i, v + 1, f\"${v}K\", ha=\"center\", fontweight=\"bold\")\nplt.tight_layout()\nplt.savefig(\"revenue.png\", dpi=150)\nprint(\"Saved\")"
}'
Guia de Seleção de Gráficos
Qual Gráfico para Qual Dado?
| Relação dos Dados | Melhor Gráfico | Nunca Use |
|---|
| Mudança ao longo do tempo | Gráfico de linhas | Gráfico de pizza |
| Comparação de categorias | Gráfico de barras (horizontal para muitas categorias) | Gráfico de linhas |
| Parte de um todo | Barras empilhadas, treemap | Gráfico de pizza (controverso, mas: barras são sempre mais claras) |
| Distribuição | Histograma, box plot | Gráfico de barras |
| Correlação | Gráfico de dispersão | Gráfico de barras |
| Ranking | Gráfico de barras horizontal | Barras verticais, pizza |
| Geográfico | Mapa coroplético | Gráfico de barras |
| Composição ao longo do tempo | Gráfico de área empilhada | Vários gráficos de pizza |
| Métrica única | Número grande (card de KPI) | Qualquer gráfico (exagero) |
| Fluxo / Processo | Diagrama de Sankey | Gráfico de barras |
O Problema do Gráfico de Pizza
Gráficos de pizza quase sempre são a escolha errada:
❌ Problemas do gráfico de pizza:
- Difícil comparar fatias de tamanhos semelhantes
- Não suporta mais de 5-6 categorias
- Gráficos de pizza 3D estão sempre errados
- Impossível ler valores exatos
✅ Use em vez disso:
- Gráfico de barras horizontal (comparação fácil)
- Barras empilhadas (parte de um todo)
- Treemap (partes hierárquicas)
- Apenas uma tabela (se precisão for importante)
Regras de Design
Eixos
| Regra | Porquê |
|---|
| Sempre começar o eixo Y em 0 (gráficos de barras) | Evita enganos visuais |
| Gráficos de linhas PODEM começar acima de 0 | Quando mostra mudança, não valores absolutos |
| Rotular ambos os eixos | O leitor não deve adivinhar as unidades |
| Remover grades desnecessárias | Reduz ruído visual |
| Usar rótulos horizontais | Texto vertical é difícil de ler |
| Ordenar gráficos de barras por valor | Não use ordem alfabética a menos que haja um motivo |
Cor
| Princípio | Aplicação |
|---|
| Máximo 5-7 cores por gráfico | Mais se torna ilegível |
| Destacar uma coisa | Cinzentar todo o resto, colorir o foco |
| Sequencial para magnitude | Claro → escuro para baixo → alto |
| Divergente para positivo/negativo | Vermelho ← neutro → azul |
| Categórica para grupos | Matizes distintos, brilho semelhante |
| Seguro para daltônicos | Evite apenas vermelho/verde — adicione formas ou rótulos |
| Significado consistente | Se azul = receita, mantenha azul em todos os lugares |
Boas Paletas de Cores
sequential = ["#eff6ff", "#bfdbfe", "#60a5fa", "#2563eb", "#1d4ed8"]
diverging = ["#ef4444", "#f87171", "#d1d5db", "#34d399", "#10b981"]
categorical = ["#3b82f6", "#f59e0b", "#10b981", "#8b5cf6", "#ef4444"]
cb_safe = ["#0077BB", "#33BBEE", "#009988", "#EE7733", "#CC3311"]
Texto e Rótulos
| Elemento | Regra |
|---|
| Título | Declara o insight, não o tipo de dado. "A receita dobrou no 2º trimestre" não "Gráfico de receita do 2º trimestre" |
| Anotações | Destaque pontos de dados importantes diretamente no gráfico |
| Legenda | Evite se possível — rotule diretamente nas linhas/barras do gráfico |
| Tamanho da fonte | Mínimo 12px, 14px+ para apresentações |
| Formato de números | Use K, M, B para números grandes (42K não 42.000) |
| Rótulos de dados | Adicione a barras/pontos quando valores exatos são importantes |
Receitas de Gráficos
Gráfico de Linhas (Série Temporal)
belt app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(12, 6))\nfig.patch.set_facecolor(\"white\")\n\nmonths = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\nthis_year = [120, 135, 148, 162, 178, 195, 210, 228, 245, 268, 290, 320]\nlast_year = [95, 102, 108, 115, 122, 130, 138, 145, 155, 165, 178, 190]\n\nax.plot(months, this_year, color=\"#3b82f6\", linewidth=2.5, marker=\"o\", markersize=6, label=\"2024\")\nax.plot(months, last_year, color=\"#94a3b8\", linewidth=2, linestyle=\"--\", label=\"2023\")\nax.fill_between(range(len(months)), last_year, this_year, alpha=0.1, color=\"#3b82f6\")\n\nax.annotate(\"$320K\", xy=(11, 320), fontsize=14, fontweight=\"bold\", color=\"#3b82f6\")\nax.annotate(\"$190K\", xy=(11, 190), fontsize=12, color=\"#94a3b8\")\n\nax.set_ylabel(\"Revenue ($K)\", fontsize=12)\nax.set_title(\"Revenue grew 68% year-over-year\", fontsize=16, fontweight=\"bold\")\nax.legend(fontsize=12)\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\nax.grid(axis=\"y\", alpha=0.3)\nplt.tight_layout()\nplt.savefig(\"line-chart.png\", dpi=150)\nprint(\"Saved\")"
}'
Gráfico de Barras Horizontal (Comparação)
belt app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(10, 6))\n\ncategories = [\"Email\", \"Social\", \"SEO\", \"Paid Ads\", \"Referral\", \"Direct\"]\nvalues = [12, 18, 35, 22, 8, 5]\ncolors = [\"#94a3b8\"] * len(values)\ncolors[2] = \"#3b82f6\" # Highlight the winner\n\n# Sort by value\nsorted_pairs = sorted(zip(values, categories, colors))\nvalues, categories, colors = zip(*sorted_pairs)\n\nax.barh(categories, values, color=colors, height=0.6)\nfor i, v in enumerate(values):\n ax.text(v + 0.5, i, f\"{v}%\", va=\"center\", fontsize=12, fontweight=\"bold\")\n\nax.set_xlabel(\"% of Total Traffic\", fontsize=12)\nax.set_title(\"SEO drives the most traffic\", fontsize=16, fontweight=\"bold\")\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\nplt.tight_layout()\nplt.savefig(\"bar-chart.png\", dpi=150)\nprint(\"Saved\")"
}'
Card de KPI / Número Grande
belt app run infsh/html-to-image --input '{
"html": "<div style=\"display:flex;gap:20px;padding:20px;background:white;font-family:system-ui\"><div style=\"background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;width:200px;text-align:center\"><p style=\"color:#64748b;font-size:14px;margin:0\">Monthly Revenue</p><p style=\"font-size:48px;font-weight:900;margin:8px 0;color:#1e293b\">$89K</p><p style=\"color:#22c55e;font-size:14px;margin:0\">↑ 23% vs last month</p></div><div style=\"background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;width:200px;text-align:center\"><p style=\"color:#64748b;font-size:14px;margin:0\">Active Users</p><p style=\"font-size:48px;font-weight:900;margin:8px 0;color:#1e293b\">12.4K</p><p style=\"color:#22c55e;font-size:14px;margin:0\">↑ 8% vs last month</p></div><div style=\"background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;width:200px;text-align:center\"><p style=\"color:#64748b;font-size:14px;margin:0\">Churn Rate</p><p style=\"font-size:48px;font-weight:900;margin:8px 0;color:#1e293b\">2.1%</p><p style=\"color:#ef4444;font-size:14px;margin:0\">↑ 0.3% vs last month</p></div></div>"
}'
Mapa de Calor
belt app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport numpy as np\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(10, 6))\n\ndays = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\nhours = [\"9AM\", \"10AM\", \"11AM\", \"12PM\", \"1PM\", \"2PM\", \"3PM\", \"4PM\", \"5PM\"]\ndata = np.random.randint(10, 100, size=(len(hours), len(days)))\ndata[2][1] = 95 # Tuesday 11AM peak\ndata[2][3] = 88 # Thursday 11AM\n\nim = ax.imshow(data, cmap=\"Blues\", aspect=\"auto\")\nax.set_xticks(range(len(days)))\nax.set_yticks(range(len(hours)))\nax.set_xticklabels(days, fontsize=12)\nax.set_yticklabels(hours, fontsize=12)\n\nfor i in range(len(hours)):\n for j in range(len(days)):\n color = \"white\" if data[i][j] > 60 else \"black\"\n ax.text(j, i, data[i][j], ha=\"center\", va=\"center\", fontsize=10, color=color)\n\nax.set_title(\"Website Traffic by Day & Hour\", fontsize=16, fontweight=\"bold\")\nplt.colorbar(im, label=\"Visitors\")\nplt.tight_layout()\nplt.savefig(\"heatmap.png\", dpi=150)\nprint(\"Saved\")"
}'
Storytelling com Dados
O Arco Narrativo
| Etapa | O que Fazer | Exemplo |
|---|
| 1. Contexto | Preparar o que o leitor precisa saber | "Monitoramos o custo de aquisição mensalmente" |
| 2. Tensão | Mostrar o problema ou mudança | "CAC aumentou 40% no 3º trimestre" |
| 3. Resolução | Mostrar o insight ou solução | "Mas o LTV aumentou 80%, então a economia unitária melhorou" |
Título como Insight
❌ Títulos descritivos (o que o gráfico mostra):
"Receita do 3º Trimestre por Linha de Produto"
"Usuários Ativos Mensais 2024"
"Resultados da Pesquisa de Satisfação do Cliente"
✅ Títulos de insight (o que o gráfico significa):
"Produto empresarial impulsiona 70% do crescimento da receita"
"Crescimento de usuários acelerou após o lançamento do nível gratuito"
"Tempo de resposta do suporte é o principal impulsionador da satisfação"
Técnicas de Anotação
| Técnica | Quando Usar |
|---|
| Rótulo de destaque | Destacar um ponto de dados específico ("Pico: 320K") |
| Linha de referência | Mostrar meta/benchmark ("Meta: 100K") |
| Região sombreada | Marcar um período de tempo ("Janela de lançamento do produto") |
| Seta + texto | Chamar a atenção para mudança de tendência |
| Linha antes/depois | Mostrar impacto de um evento |
Gráficos em Modo Escuro
belt app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\n# Dark theme\nplt.rcParams.update({\n \"figure.facecolor\": \"#0f172a\",\n \"axes.facecolor\": \"#0f172a\",\n \"axes.edgecolor\": \"#334155\",\n \"axes.labelcolor\": \"white\",\n \"text.color\": \"white\",\n \"xtick.color\": \"white\",\n \"ytick.color\": \"white\",\n \"grid.color\": \"#1e293b\"\n})\n\nfig, ax = plt.subplots(figsize=(12, 6))\nmonths = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\"]\nvalues = [45, 52, 58, 72, 85, 98]\n\nax.plot(months, values, color=\"#818cf8\", linewidth=3, marker=\"o\", markersize=8)\nax.fill_between(range(len(months)), values, alpha=0.15, color=\"#818cf8\")\nax.set_title(\"MRR Growth: On track for $100K\", fontsize=18, fontweight=\"bold\")\nax.set_ylabel(\"MRR ($K)\", fontsize=13)\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\nax.grid(axis=\"y\", alpha=0.2)\n\nfor i, v in enumerate(values):\n ax.annotate(f\"${v}K\", (i, v), textcoords=\"offset points\", xytext=(0, 12), ha=\"center\", fontsize=11, fontweight=\"bold\")\n\nplt.tight_layout()\nplt.savefig(\"dark-chart.png\", dpi=150, facecolor=\"#0f172a\")\nprint(\"Saved\")"
}'
Erros Comuns
| Erro | Problema | Correção |
|---|
| Gráficos de pizza | Difícil comparar, sempre enganoso | Use gráficos de barras ou treemaps |
| Eixo Y não começa em 0 (barras) | Exagera diferenças | Comece em 0 para barras, OK truncar para linhas |
| Muitas cores | Ruído visual, confuso | Máximo 5-7 cores, destaque apenas o que importa |
| Sem título ou título genérico | Leitor não sabe o insight | Título = a conclusão, não o tipo de dado |
| Gráficos 3D | Distorce dados, parece amador | Sempre use 2D |
| Eixos Y duplos | Enganador, difícil de ler | Use dois gráficos separados |
| Ordenação alfabética em barras | Esconde a história | Ordene por valor (maior primeiro) |
| Sem rótulos nos eixos | Leitor não consegue interpretar | Sempre rotule com unidades |
| Chartjunk (elementos decorativos) | Distrai dos dados | Remova tudo que não transmite informação |
| Apenas vermelho/verde para codificação de cores | Usuários daltônicos não conseguem ler | Use formas, padrões ou paletas seguras para daltônicos |
Skills Relacionadas
npx skills add inference-sh/skills@pitch-deck-visuals
npx skills add inference-sh/skills@technical-blog-writing
npx skills add inference-sh/skills@competitor-teardown
Navegue por todos os apps: belt app list