Figuras Científicas (calidad de publicación)
1219 generadores listos para ejecutar de matplotlib, numerados 0-1218, que reproducen
la estética de figuras de revistas costosas: Times New Roman en todas partes, espinas
delgadas y oscuras, paletas apagadas pero saturadas, rejillas de múltiples paneles ajustadas,
anotaciones de umbral y métricas, densidades marginales, exportación a 300 dpi.
Cada script es autónomo. Se ejecuta sin argumentos, genera sus propios datos sintéticos
y escribe un PNG en output/ nombrado según su número.
cd scripts
python fig_threshold_regression.py # -> output/01_threshold_regression.png
Encontrar la figura correcta
No lea este archivo buscando un nombre de gráfico; el catálogo está dividido para que cargue solo lo que necesita.
- Lea
catalog/INDEX.md— 135 grupos, cada uno una disciplina o familia de gráficos, con su rango de números. - Lea el archivo del grupo que coincida. Cada uno enumera cada figura en su rango con lo que dibuja y cuándo usarla.
- Lea ese script antes de adaptarlo.
Cuando ya se conozca el nombre del gráfico, omita el índice y busque en todos los grupos:
grep -ril "sankey" catalog/
grep -ril "curva de supervivencia\|kaplan" catalog/
Para ver cómo se ve una figura antes de ejecutarla, abra
reference/thumbs/<número>_<nombre>.jpg — las 1219 están ahí, reducidas.
reference/curated/ contiene 33 de ellas a resolución completa.
Si nada en el catálogo se adapta, comience con el grupo de propósito general
(0-54): distribuciones, correlación, regresión, ranking, composición y series
temporales, en una forma que cualquier disciplina pueda tomar prestada.
Fuentes: lea esto antes de su primera ejecución
La tipografía predeterminada es Times New Roman. Es propietaria y no está
incluida; fonts/ contiene Tinos (SIL OFL) en su lugar, que tiene anchos de
avance byte-idénticos, por lo que una figura se diseña igual independientemente de
que la máquina tenga la fuente real. Confirme que la pila de fuentes se resuelve
antes de confiar en cualquier salida:
cd scripts
python check_typography.py --metrics
# vs Tinos idéntico (Tinos-Regular.ttf)
Si matplotlib alguna vez recurre a DejaVu, set_pub_style() lanza una excepción
en lugar de degradarse silenciosamente — una tipografía incorrecta es invisible
para cualquier verificación basada en PNG. Detalles en fonts/README.md.
Requisitos
matplotlib>=3.6 y numpy son necesarios para cada figura; scipy, pandas,
seaborn, scikit-learn, openpyxl y Pillow para subconjuntos de la biblioteca
y las herramientas. El mínimo 3.6 es importante: la suplencia de fuentes glifo por glifo
es lo que permite que una etiqueta en chino use una fuente Song mientras los números
permanecen en Times.
pip install -r requirements.txt
El estilo compartido: scripts/pubstyle.py
Importe esto en cualquier figura nueva para que coincida con la 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() # aplicar rcParams una vez; no los toque usted
fig, axes = ... # construya su figura
panel_title(axes[0], "Magnitud de deriva a lo largo del tiempo")
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,
"El cierre de bucle elimina la deriva no acotada", # la conclusión
subtitle="n = 240 trayectorias, 8 secuencias")
panel_labels_inches(fig, axes) # (a) (b) (c) a desplazamientos iguales en pulgadas
savefig(fig, "my_fig.png") # 300 dpi en output/
Los tamaños provienen de pubstyle.TYPE_SCALE, por lo que no pase fontsize= cuando
uno de estos ayudantes lo hará por usted. Paletas clave en PALETTES: teal_rust,
blue_red, greens, earth, div_rdbu, pastel4, zones, más las rampas
seguras para daltonismo cb_*. Reutilícelas en lugar de los valores predeterminados
de matplotlib — son lo que hace que las figuras se vean costosas.
scripts/figkit.py es la capa de construcción complementaria: inserciones de zoom,
tarjetas de texto, ejes basados en pulgadas, colocación de etiquetas sin superposición.
Adaptación a datos reales
Si los datos son una tabla, no comience con estos scripts. Use la puerta de entrada en su lugar, que aplica todo el sistema de diseño a un archivo:
cd scripts
python plot_data.py --data yours.csv --describe # ¿qué puedo dibujar?
python plot_data.py --data yours.csv --kind scatter_fit --x a --y b --group g
Catorce tipos de gráficos, detección de codificación y delimitador, valores
"1,234" y "12.5%" convertidos a números, selección automática de fuente CJK
para nombres de columnas en chino, y tanto .xlsx como .csv.
Para adaptar uno de los 1219 generadores, primero encuentre dónde viven sus datos:
python plot_data.py --contract fig_threshold_regression.py
Los scripts no son uniformes en esto. 19 de los 1219 aíslan sus datos en una
función gen_data(), 299 los mantienen en otra función con nombre que debe
leerse primero, 656 los construyen en línea dentro de main(), y 245 no
tienen datos sustituibles porque la figura es un modelo — un espectro de Kaimal,
un filtro de Kalman, una escena de microscopía sintética. El informe --contract
dice qué caso aplica y nombra las constantes que vale la pena cambiar.
Sea cual sea el que edite, conserve el código de trazado y estilo. El estilo es la parte valiosa; no lo reescriba con los valores predeterminados de matplotlib.
Reglas estéticas (qué hace que estas se vean costosas)
- Oculte las espinas superior y derecha; mantenga las espinas delgadas (
0.8) y gris oscuro (#333), no negro. - Times New Roman en todas partes, pequeño (7-9 pt cuerpo, mínimo 6.0 pt), negrita solo para el título de la figura, letras de panel y títulos de panel.
- Pares de paletas apagadas pero saturadas (verde azulado/óxido, azul/rojo) — nunca RGB primario.
- Agregue densidades marginales o histogramas a los diagramas de dispersión siempre que el espacio lo permita.
- Anote estadísticas en un cuadro blanco redondeado con un borde delgado; coloque el texto de umbral en el color de acento.
- Rejillas densas de múltiples paneles con
tight_layout(h_pad, w_pad); comparta la leyenda. - Exporte a 300 dpi con
bbox_inches="tight"(manejado porsavefig).
DESIGN_SYSTEM.md tiene los números aplicados detrás de cada regla.
Verificación
Abra el PNG en output/ y compárelo con la solicitud. Si un panel está apretado,
aumente figsize o h_pad/w_pad; si los colores chocan, cambie a una sola
entrada de PALETTES.
Leer el PNG no puede decirle qué tipografía se usó, porque un PNG no almacena metadatos de fuente. Ejecute también la auditoría tipográfica — renderiza a PDF y lee las fuentes que el renderizador incrustó:
cd scripts
python check_typography.py # los errores deben ser cero
python check_figures.py --jobs 8 # ejecuta todo, audita cada PNG
python run_all.py --parallel 8 # reconstruye todas las 1219 (aproximadamente 15 minutos)
python run_all.py --range 173-192 # solo el bloque de teledetección
python run_all.py --parallel 8 --vector # PDF junto a cada PNG, para envío
Documentos relacionados
catalog/INDEX.md— los 135 grupos y sus rangos de números.DESIGN_SYSTEM.md— el estándar visual entre figuras (tamaños de lienzo, paletas, escala tipográfica, espaciado, mapas de color prohibidos). Léalo antes de escribir una figura nueva o editar una existente.WORKFLOW.md— el manual operativo: elegir un generador, intercambiar datos reales, crear una nueva figura connew_figure.py, ejecutar las compuertas de calidad.SKILL.mdresponde qué figura;WORKFLOW.mdresponde cómo usarla.scripts/reference.md— la API completa depubstyle.fonts/README.md— por qué se incluye una fuente, cuál, y bajo qué licencia.NUMBER_REGISTRY.md— qué rangos de números están ocupados. Las figuras nuevas comienzan en 1219.