Pular para o conteúdo principal

Manual de Estilo de Gráficos

Esta é a referência canônica de como é um gráfico Blocklens "bom". Ela sintetiza as regras expressas nos ~70 modelos integrados (chart-templates), nos modelos populados no banco de dados (template-seeds) e no comportamento de renderização do the chart renderer.

Dois públicos:

  1. Autores de frontend / modelos — apliquem estas regras ao projetar novos modelos ou dados de seed.
  2. A skill lab-author do Buddy — carrega uma cópia condensada destas regras para que as configurações de gráfico geradas por IA correspondam à linguagem visual do catálogo curado.

Se uma regra abaixo contradisser o que um modelo faz atualmente, o modelo prevalece por questões de compatibilidade, mas novos trabalhos devem seguir este guia.


1. Eixos

1.1 O preço sempre no eixo Y direito, escala logarítmica

Todo modelo que sobrepõe o preço do BTC coloca o preço em um eixo direito separado com scale: "log". A métrica primária vai no eixo esquerdo. Vincular o preço visualmente mas separá-lo numericamente mantém legíveis tanto as métricas de crescimento rápido (holdings, AUM, supply) quanto o preço.

Exceção: modelos de preço (realized_price, transferred_price) colocam o preço no mesmo eixo do modelo, para que os usuários possam comparar dois preços em uma só escala. Esse eixo é logarítmico.

1.2 Métricas que compartilham uma unidade compartilham um eixo

  • lth_supply + sth_supply → um eixo esquerdo (ambos em BTC).
  • lth_mvrv + sth_mvrv → um eixo esquerdo (ambos razões).
  • Funding rate (%) à esquerda, preço (USD) à direita — unidades diferentes, eixos diferentes.

Não empilhe duas métricas com faixas muito diferentes no mesmo eixo linear. A série menor ficará visualmente esmagada.

1.3 Comparação de ciclos: allLeftAxis: true + escala logarítmica

Os modelos de desempenho de ciclo (por exemplo, cycle-perf-low, cycle-perf-ath, cycle-perf-halving) forçam allLeftAxis: true com yAxes: [{ side: "left", scale: "log" }]. Múltiplos ciclos se sobrepõem no mesmo eixo logarítmico, de modo que o crescimento exponencial seja comparável entre ciclos.

1.4 Cor do rótulo do eixo

  • Múltiplas séries de cores diferentes compartilhando um eixo → o rótulo do eixo é cinza-escuro neutro #6b7280.
  • Uma única métrica que possui um eixo → o rótulo pode herdar a cor dessa métrica (usado raramente; cinza é o padrão seguro).

2. Seleção de escala

Use linearUse logarítmica
Supplies, fluxos, contagens, valores em USD, market capPreço do BTC (sempre)
Razões (MVRV, SOPR), percentuais, funding ratesÍndices de ações quando exibidos sozinhos (SPY/QQQ/IWM)
Deltas diários, variações líquidasModelos de preço (realized_price, transferred_price)
Qualquer coisa que oscile dentro de uma faixa limitadaSobreposições de desempenho de ciclo

Se uma métrica abrange mais de ~2 ordens de magnitude na janela visível, prefira logarítmica.


3. Tipo de gráfico por métrica

EstiloQuandofillOpacity
areaHoldings, supplies, fluxos cumulativos, AUM, coortes empilhadas0.3
lineRazões (MVRV, SOPR), taxas (funding), sobreposições de preço0.1
barDeltas diários / de 30 dias (fluxos líquidos, supply 30D Δ)0.5
candlestickApenas OHLC

Barras em um eixo logarítmico ficam ilegíveis — mantenha as barras lineares.


4. Paleta de cores

4.1 Por domínio

DomínioElementoHex
Sobreposição de preçoPreço do BTC (neutro)#6b7280
SupplyLTH#2563eb
SupplySTH#dc2626
Supplyterceira coorte#fbbf24 / #FFBB28
ETFholdings#f59e0b
ETFAUM#3b82f6
ETFfluxo líquido#10b981
ETFfluxo cumulativo#059669
ETFdominância#8b5cf6
ETFholdings dos EUA#3b82f6
ETFrealized price#dc2626 / #ea580c
DATtotal de holdings#F7931A (marca Bitcoin)
DATempresas de capital aberto#0088FE
DATgovernos#FF4444
DATempresas privadas#FFBB28
DATvariação líquida#82ca9d
DATdominância#ff7300
Fundingrate#3b82f6
Fundingspread#f97316
Fundingzona de sobreaquecimentorgba(239,68,68,0.1)
Fundingzona de capitulaçãorgba(34,197,94,0.1)
Macroyields (neutro)#6b7280
Macroinflação#f59e0b
MacroVIX / risco#ef4444
Ciclo 1→4violeta → azul → verde → laranja#8b5cf6#3b82f6#22c55e#f97316

4.2 Coloração de múltiplas métricas

Quando duas coortes relacionadas aparecem juntas (LTH/STH, EUA/não-EUA, público/privado), use o par estabelecido (azul + vermelho para LTH/STH), para que os usuários aprendam um único modelo mental. Não reinvente paletas a cada gráfico.


5. Linhas e áreas de referência

Use-as somente quando o limiar tem uma interpretação clara:

  • Funding rate > 20% → área sombreada em vermelho, rótulo "Sobreaquecido".
  • Funding rate < -10% → área sombreada em verde, rótulo "Capitulação".
  • SOPR = 1.0 → linha de referência no ponto de equilíbrio (oportunidade — ainda não presente nos modelos).
  • MVRV = 1.0 → linha de referência na paridade de valor justo.

Evite linhas decorativas sem significado numérico. No máximo uma ou duas anotações por gráfico.

"referenceAreas": [
{ "y1": 20, "y2": 100, "yAxisId": "axis-left", "fill": "rgba(239,68,68,0.1)", "label": "Overheated" },
{ "y1": -100, "y2": -10, "yAxisId": "axis-left", "fill": "rgba(34,197,94,0.1)", "label": "Capitulation" }
]

6. Padrões de intervalo de datas

PredefiniçãoQuando
ALLMétricas de tendência longa — supply, valuation, sobreposições de ciclo, qualquer coisa com um histórico longo que os usuários queiram ver por completo.
1YMétricas ruidosas em que visões plurianuais obscurecem o sinal — fluxos líquidos diários, variação líquida de DAT, funding spread.
1W / 1MNunca como padrão — estes são níveis de zoom controlados pelo usuário.

7. Constantes de estilo

Use-as em todo lugar, a menos que haja um motivo específico do gráfico para não usar:

  • strokeWidth: 2 para todas as linhas.
  • fillOpacity: 0.3 para áreas, 0.1 para sobreposições de linha, 0.5 para barras.
  • Formato de instanceId: {metricId}-{seq} (por exemplo, price-1, lth_supply-1). Estável entre edições.

8. Convenções de nomenclatura

  • Nome do gráfico — frase nominal, em maiúsculas iniciais como um cabeçalho de coluna. ≤60 caracteres. Sem emojis.
    • Bom: BTC LTH Supply with 30D Change, ETF Net Flow vs. Price
    • Ruim: 📈 Bitcoin Long-Term Holders!!! (2024)
  • Descrição — uma frase descrevendo o que o gráfico mostra e o insight que ele revela.
    • Bom: Long-term holder supply with 30-day delta bars to surface accumulation and distribution waves.

9. Antipadrões

Rejeite estes ao revisar um modelo ou uma configuração gerada por IA:

  • Uma única métrica em um layout de dois eixos — o eixo vazio é espaço desperdiçado.
  • Mais de 4 séries em um eixo sem empilhamento — visualmente ilegível.
  • Misturar faixas muito diferentes em um único eixo linear (por exemplo, contagens de 1-2M com preço de 20k-100k) — a série menor fica invisível.
  • Preço do BTC em um eixo linear quando pareado com uma métrica de alto crescimento — o preço dominará visualmente.
  • Linhas de referência decorativas sem significado numérico — adicionam ruído, não sinal.
  • Barras em escala logarítmica — ficam ilegíveis.
  • Paleta sob medida por gráfico — quebra as associações de cor que o usuário aprendeu.

10. Referência rápida para a skill lab-author

Quando o Buddy monta uma configuração de gráfico a partir de linguagem natural:

  1. Resolva os IDs das métricas via search_metrics / get_metric. Confirme que o grade de cada métrica está dentro do tier do usuário.
  2. Decida o layout dos eixos:
    • O preço do BTC é uma das séries? → preço à direita com scale: "log", primária à esquerda.
    • As métricas restantes compartilham uma unidade? → mesmo eixo. Unidades diferentes? → eixos diferentes.
  3. Escolha os estilos de gráfico conforme o §3.
  4. Escolha as cores conforme o §4.1 — use a paleta estabelecida para o domínio.
  5. Escolha a escala conforme o §2.
  6. Escolha o intervalo de datas conforme o §6.
  7. Adicione linhas/áreas de referência somente quando o limiar tiver um significado claro (§5).
  8. Aplique as constantes de estilo (§7) e as convenções de nomenclatura (§8).
  9. Execute a checklist de antipadrões (§9) antes de salvar.

11. Onde os modelos residem

  • Estáticos (frontend)chart-templates. ~70 modelos carregados na inicialização do app.
  • Banco de dados (tabela templates) — modelos curados populados por template-seeds e expostos via the templates API.
  • Criados pelo usuário (tabela user-charts) — sobre o que trata o restante deste guia. Salvos pela UI do Lab, ao fazer um fork de um modelo, ou pela ferramenta MCP save_chart do Buddy.

O formato JSON da configuração (metrics, formulas, yAxes, dateRange, referenceLines, referenceAreas, etc.) é idêntico nas três fontes — consulte the chart config em the Lab API client para a definição TypeScript e the API schema para o esquema Pydantic.