Figuras Científicas (qualidade de publicação)
1219 geradores matplotlib prontos para execução, numerados 0-1218, que reproduzem
a estética de figuras de periódicos de alto padrão: Times New Roman em toda a figura,
espinhos finos e escuros, paletas suaves e saturadas, grades de múltiplos painéis
justas, anotações de limiares e métricas, densidades marginais, exportação em 300 dpi.
Cada script é autocontido. É executado sem argumentos, cria seus próprios
dados sintéticos e escreve um PNG em output/ nomeado conforme seu número.
cd scripts
python fig_threshold_regression.py # -> output/01_threshold_regression.png
Encontrando a figura certa
Não leia este arquivo procurando por um nome de gráfico; o catálogo é dividido para que você carregue apenas o que precisa.
- Leia
catalog/INDEX.md— 135 grupos, cada um uma disciplina ou família de gráficos, com sua faixa numérica. - Leia o arquivo do grupo que corresponde. Cada um lista todas as figuras em sua faixa com o que desenha e quando usá-lo.
- Leia o script antes de adaptá-lo.
Quando o nome do gráfico já é conhecido, pule o índice e pesquise em todos os grupos:
grep -ril "sankey" catalog/
grep -ril "生存曲线\|kaplan" catalog/
Para ver como uma figura se parece antes de executá-la, abra
reference/thumbs/<número>_<nome>.jpg — todos os 1219 estão lá, reduzidos.
reference/curated/ contém 33 deles em resolução total.
Se nada no catálogo se encaixar, comece pelo grupo de uso geral
(0-54): distribuições, correlação, regressão, ranqueamento, composição e séries
temporais, em uma forma que qualquer disciplina pode emprestar.
Fontes: leia isto antes da primeira execução
A fonte padrão é Times New Roman. Ela é proprietária e não está incluída;
fonts/ contém Tinos (SIL OFL) como substituta, que tem larguras de avanço
byte-idênticas, portanto uma figura se comporta da mesma forma independentemente de a
máquina ter a fonte real. Confirme que a pilha resolve antes de confiar em qualquer saída:
cd scripts
python check_typography.py --metrics
# vs Tinos idêntico (Tinos-Regular.ttf)
Se o matplotlib cair para DejaVu, set_pub_style() lança uma exceção em vez de
degradar silenciosamente — uma fonte errada é invisível para qualquer verificação baseada
em PNG. Detalhes em fonts/README.md.
Requisitos
matplotlib>=3.6 e numpy são necessários para todas as figuras; scipy, pandas,
seaborn, scikit-learn, openpyxl e Pillow são necessários para subconjuntos da
biblioteca e das ferramentas. O piso 3.6 é importante: o fallback de fonte glifo por glifo
permite que uma legenda em chinês use uma fonte Song enquanto os numerais permanecem em Times.
pip install -r requirements.txt
O estilo compartilhado: scripts/pubstyle.py
Importe isto em qualquer nova figura para corresponder à estética:
from pubstyle import (set_pub_style, PALETTES, savefig, style_axes,
panel_title, add_figure_header, header_height,
panel_labels_inches)
set_pub_style() # aplica rcParams uma vez; nunca toque neles você mesmo
fig, axes = ... # construa sua figura
panel_title(axes[0], "Magnitude de deriva ao longo do tempo")
head = header_height(fig, subtitle=True)
fig.tight_layout(rect=[0, 0.03, 1, 1 - head / fig.get_size_inches()[1]])
add_figure_header(fig,
"Fechamento de loop remove deriva ilimitada", # a conclusão
subtitle="n = 240 trajetórias, 8 sequências")
panel_labels_inches(fig, axes) # (a) (b) (c) em deslocamentos de polegadas iguais
savefig(fig, "my_fig.png") # 300 dpi em output/
Os tamanhos vêm de pubstyle.TYPE_SCALE, portanto não passe fontsize= quando um
desses ajudantes fizer isso por você. Paletas principais em PALETTES: teal_rust,
blue_red, greens, earth, div_rdbu, pastel4, zones, mais os gradientes
cb_* seguros para daltonismo. Reutilize estas em vez dos padrões do matplotlib —
são elas que fazem as figuras parecerem caras.
scripts/figkit.py é a camada de construção complementar: recortes de zoom, cartões
de texto, eixos baseados em polegadas, posicionamento de rótulos sem sobreposição.
Adaptando para dados reais
Se os dados são uma tabela, não comece por estes scripts. Use a porta de entrada principal, que aplica todo o sistema de design a um arquivo:
cd scripts
python plot_data.py --data seus.csv --describe # o que posso desenhar?
python plot_data.py --data seus.csv --kind scatter_fit --x a --y b --group g
Quatorze tipos de gráfico, detecção de codificação e delimitador, coerção de "1,234"
e "12.5%" de volta para números, seleção automática de fonte CJK para nomes de
colunas em chinês, e suporte a .xlsx além de .csv.
Para adaptar um dos 1219 geradores, primeiro descubra onde seus dados estão:
python plot_data.py --contract fig_threshold_regression.py
Os scripts não são uniformes quanto a isso. 19 dos 1219 isolam seus dados em
uma função gen_data(), 299 os mantêm em outra função nomeada que precisa ser
lida primeiro, 656 os constroem inline dentro de main(), e 245 não têm
dados substituíveis porque a figura é um modelo — um espectro de Kaimal, um filtro
de Kalman, uma cena de microscopia sintética. O relatório --contract diz qual
caso se aplica e nomeia as constantes que valem a pena alterar.
Qualquer que seja editado, mantenha o código de plotagem e estilo. O estilo é a parte valiosa; não o reescreva com os padrões do matplotlib.
Regras estéticas (o que as faz parecer caras)
- Oculte os espinhos superior e direito; mantenha os espinhos finos (
0.8) e cinza escuro (#333), não preto. - Times New Roman em toda a figura, pequeno (7-9 pt corpo, mínimo absoluto 6.0 pt), negrito apenas para o título da figura, letras dos painéis e títulos dos painéis.
- Pares de paletas suaves e saturadas (teal/ferrugem, azul/vermelho) — nunca RGB primário.
- Adicione densidades marginais ou histogramas a gráficos de dispersão sempre que o espaço permitir.
- Anote estatísticas em uma caixa branca arredondada com borda fina; coloque o texto de limiar na cor de destaque.
- Grades densas de múltiplos painéis com
tight_layout(h_pad, w_pad); compartilhe a legenda. - Exporte em 300 dpi com
bbox_inches="tight"(tratado porsavefig).
DESIGN_SYSTEM.md tem os números aplicados por trás de cada regra.
Verificação
Abra o PNG em output/ e compare-o com a solicitação. Se um painel estiver
apertado, aumente figsize ou h_pad/w_pad; se as cores conflitarem, mude para uma
única entrada PALETTES.
Ler o PNG não pode dizer qual tipo de fonte foi usado, porque um PNG não armazena metadados de fonte. Execute também a auditoria tipográfica — ela renderiza para PDF e lê as fontes que o renderizador incorporou:
cd scripts
python check_typography.py # erros devem ser zero
python check_figures.py --jobs 8 # execute tudo, audite cada PNG
python run_all.py --parallel 8 # reconstrua todos os 1219 (cerca de 15 minutos)
python run_all.py --range 173-192 # apenas o bloco de sensoriamento remoto
python run_all.py --parallel 8 --vector # PDF junto com cada PNG, para submissão
Documentos relacionados
catalog/INDEX.md— os 135 grupos e suas faixas numéricas.DESIGN_SYSTEM.md— o padrão visual entre figuras (tamanhos de tela, paletas, escala tipográfica, espaçamento, mapas de cores proibidos). Leia antes de escrever uma nova figura ou editar uma existente.WORKFLOW.md— o manual de operação: escolher um gerador, substituir dados reais, estruturar uma nova figura comnew_figure.py, executar as verificações de qualidade.SKILL.mdresponde qual figura;WORKFLOW.mdresponde como usá-la.scripts/reference.md— a API completa depubstyle.fonts/README.md— por que uma fonte está aqui, qual, e sob qual licença.NUMBER_REGISTRY.md— quais faixas numéricas estão ocupadas. Novas figuras começam em 1219.