CommunityImagengithub.com

wxx827/figuras-cientificas

1219 generadores listos para ejecutar de matplotlib para figuras científicas de calidad de publicación, sobre un sistema de diseño Times New Roman con una fuente de respaldo compatible y un lintor tipográfico que lee las fuentes incrustadas en el PDF renderizado.

¿Qué es figuras-cientificas?

Esta habilidad proporciona un repositorio de 1219 scripts de matplotlib (numerados del 0 al 1218) que generan figuras científicas de calidad de publicación. Cada script es autónomo: genera sus propios datos sintéticos, se ejecuta sin argumentos y exporta un PNG a 300 dpi en la carpeta `output/`. El sistema de diseño fuerza el uso de Times New Roman (con Tinos como respaldo métricamente compatible) y paletas de colores apagados y saturados que imitan la estética de revistas costosas. El repositorio cubre una amplia gama de disciplinas: desde gráficos estadísticos básicos hasta visualizaciones complejas de mapas geográficos, ML (incluyendo SHAP), bio-ómica, clima, física, ingeniería, economía, ensayos clínicos, química, materiales, diagnóstico Bayesiano, neurociencia, robótica, teledetección, sistemas de potencia, transporte, hidrología, ecología, astronomía, visión por computadora, redes neuronales y más. La herramienta `plot_data.py` permite aplicar el mismo sistema de diseño a datos tabulares reales (CSV, Excel), mientras que `plot_data.py --contract` identifica dónde reemplazar los datos sintéticos de un script existente. Incluye herramientas de verificación: `check_typography.py` audita las fuentes incrustadas en PDF, `check_figures.py` verifica calidad, y `run_all.py` permite regenerar todas las figuras o un rango específico. Útil para investigadores, ingenieros y científicos de datos que necesitan figuras consistentes, atractivas y listas para publicación sin invertir tiempo en diseño gráfico.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wxx827/paper-figures-skill/tree/HEAD/.cursor/skills/scientific-figures

Installed? Explore more Imagen skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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.

  1. Lea catalog/INDEX.md — 135 grupos, cada uno una disciplina o familia de gráficos, con su rango de números.
  2. Lea el archivo del grupo que coincida. Cada uno enumera cada figura en su rango con lo que dibuja y cuándo usarla.
  3. 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)

  1. Oculte las espinas superior y derecha; mantenga las espinas delgadas (0.8) y gris oscuro (#333), no negro.
  2. 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.
  3. Pares de paletas apagadas pero saturadas (verde azulado/óxido, azul/rojo) — nunca RGB primario.
  4. Agregue densidades marginales o histogramas a los diagramas de dispersión siempre que el espacio lo permita.
  5. Anote estadísticas en un cuadro blanco redondeado con un borde delgado; coloque el texto de umbral en el color de acento.
  6. Rejillas densas de múltiples paneles con tight_layout(h_pad, w_pad); comparta la leyenda.
  7. Exporte a 300 dpi con bbox_inches="tight" (manejado por savefig).

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 con new_figure.py, ejecutar las compuertas de calidad. SKILL.md responde qué figura; WORKFLOW.md responde cómo usarla.
  • scripts/reference.md — la API completa de pubstyle.
  • 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.

Skills relacionados