Communitygithub.com

0x6869726f6b69/claude-skills

Convierte resultados de análisis (gráficos, CSV/NPZ, scripts, notebooks) en figuras de múltiples paneles, tablas y leyendas de calidad para publicación en revistas tipo Nature. Pregunta al usuario qué resultados agrupar o, si no hay instrucciones, diseña la figura de forma autónoma siguiendo una narrativa científica.

¿Qué es claude-skills?

Este skill transforma resultados de análisis dispersos en figuras de múltiples paneles listas para publicación en revistas de alto impacto como Nature. Al activarse, pregunta al usuario qué resultados desea combinar o, si no hay instrucciones, selecciona, organiza y colorea de forma autónoma los paneles siguiendo una narrativa científica (Qué→Cómo→Por qué→Rendimiento→Impacto). Genera archivos vectoriales (PDF/SVG) con especificaciones técnicas de Nature (Arial 5–7 pt, ancho 89/183 mm, paleta unificada) e incluye una verificación de calidad automática y manual. Es compatible con cualquier petición en inglés o español para crear figuras profesionales, tablas y leyendas a partir de datos numéricos, gráficos existentes o notebooks.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/0x6869726f6b69/claude-skills/tree/HEAD/skills/nature-figure-composer

Preguntar en tu IA favorita

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

Documentación

Compositor de Figuras de Grado Nature

La figura no es una «exposición de resultados» sino un medio para probar visualmente una afirmación científica. Este skill reorganiza resultados analíticos dispersos en una historia de «1 Figura = 1 Afirmación» y los convierte en archivos que cumplen las especificaciones técnicas de las revistas Nature.

<SKILL_DIR> es el directorio donde se encuentra este SKILL.md. Requisitos: Python 3.9+, matplotlib, numpy, pandas, Pillow, PyMuPDF (pip install pymupdf), scipy (para intervalos de confianza del 95%).

Recursos incluidos

RutaContenidoCuándo leerlo
references/guidelines.mdPautas de trazado (7 principios), especificaciones técnicas de Nature, lista de verificación finalAntes de planificar y al hacer QA
references/storyboard.mdCómo agrupar resultados en figuras, tipos de Figura 1, diseños de distribución, procedimiento de diseño automáticoPaso 3
references/charts.mdTipo de afirmación → formato de gráfico, incertidumbre, ejes, cómo dibujar mapas, ejemplos de código nfigPaso 3 (elección de formato), 5
references/captions-tables.mdCómo escribir leyendas, tablas y material suplementario, con ejemplosPaso 7
scripts/inventory.pyInventario de archivos de resultados + hoja de contactos numeradaPaso 1
scripts/nfig.pyEstilo, paleta de colores fija, etiquetas de paneles, ayudante de trazado, QA automáticoPaso 4–6
scripts/assemble.pyCombina PDF/SVG/PNG existentes en múltiples paneles conservando vectoresCuando haya paneles que no se puedan volver a dibujar
scripts/check_figure.pyVerificación de especificaciones de archivos terminados + simulación de daltonismoPaso 6
scripts/make_table.pyCSV → tabla LaTeX con booktabs / MarkdownPaso 7
assets/figure_plan_template.mdPlantilla para el plan de figuraPaso 3
assets/style_template.pyPlantilla con nombres mostrados, rangos de color, etiquetas de ejes comunes a todas las figurasPaso 4
assets/layout_example.jsonEjemplo de diseño para assemble.pyAl usar assemble

Flujo de trabajo

Paso 1 — Inventario de resultados (rápido, antes de preguntar)

python <SKILL_DIR>/scripts/inventory.py <project_root> --sheet paper_figures/_inventory --out paper_figures/_inventory/inventory.md
  • Lee contact_sheet_*.png en paper_figures/_inventory/ para entender qué muestra cada resultado. La columna «made by / read by» del informe permite rastrear desde la figura hasta el script de generación y los datos originales (necesario para volver a dibujar).
  • Si hay manuscrito, README o notas, léelos para comprender la pregunta de investigación, el método propuesto y la afirmación.
  • Añade una observación de una frase a cada resultado (ej.: #6 benchmark.csv → El método propuesto alcanza la mayor precisión en los 3 conjuntos de datos, +6 pt). Esto servirá como material para el Paso 2 (opciones) y el Paso 3 (plan).
  • Si no se encuentran resultados, pregunta su ubicación en el Paso 2.

Paso 2 — Entrevista (obligatorio tras activar el skill)

La decisión sobre cómo organizar la figura recae en el usuario, así que confírmalo antes de dibujar. No repreguntes puntos ya aclarados en el mensaje de activación. Si existe AskUserQuestion, úsalo; si no, formula las preguntas numeradas en texto y espera la respuesta. Las opciones deben ser concretas (con número de archivo y observación) a partir del inventario del Paso 1.

  1. Objetivo (obligatorio) «¿Qué resultados agrupar en una sola figura?»
    • Automático: Diseñar la configuración completa de figuras del artículo (Fig. 1–N + SI) a partir de todos los resultados (Recomendado)
    • 1–2 grupos candidatos creados a partir del inventario (ej.: «Comparación de rendimiento: #1 accuracy_bar, #6 benchmark.csv»)
    • Entrada libre (Otros) para especificar, p. ej., «#1, #4, #6 en una sola»
  2. Afirmación «¿Cuál es el mensaje principal de esta figura?» — 1–2 afirmaciones estimadas + automático
  3. Tamaño de publicación — 2 columnas 183 mm (Recomendado) / 1 columna 89 mm / 1,5 columnas 120–136 mm / automático
  4. Productos (selección múltiple) — Figura (PDF+SVG+PNG) / Leyenda (en inglés) / Tabla / Lista de candidatos a SI

Manejo de respuestas:

  • Si el mensaje de activación ya especifica el objetivo (Q1), se puede avanzar con valores predeterminados para Q2–Q4 (afirmación estimada, 183 mm, Figura + Leyenda) y solo preguntar cuando haya dudas.
  • Para «Automático» o elementos sin instrucciones, Claude decide qué resultados adoptar, cómo colocarlos y cómo organizarlos. Sigue el «Procedimiento de diseño automático» de references/storyboard.md.
  • Si te dicen «avanza sin preguntar», trata todos los elementos como automáticos.
  • El texto en las figuras y las leyendas estarán en inglés por defecto (porque la revista de destino es en inglés). La conversación se mantiene en el idioma del usuario.

Paso 3 — Plan de figura (storyboard)

Antes de escribir código, lee references/storyboard.md y escribe paper_figures/figure_plan.md usando el formato de assets/figure_plan_template.md. Incluye:

  • Flujo general del artículo (Qué → Cómo → Por qué → Rendimiento → Impacto) y el rol de cada figura
  • Para cada figura: Afirmación en una frase (que será el título de la leyenda), tabla de paneles (etiqueta / contenido / tipo de gráfico –según §1 de references/charts.md– / fuente de datos / si es hero o support), mosaico y dimensiones, función del color
  • Resultados excluidos del texto principal (destinados a SI) y su motivo. No ocultes limitaciones o fracasos; colócalos como panel de limitaciones en el texto principal o en SI
  • Información faltante (n, definición de barras de error, pruebas estadísticas, unidades) enumerada como [AUTHOR TODO]

Presenta el plan en una tabla breve en el chat. En caso de diseño automático o si se sigue exactamente lo especificado, avanza al trazado sin esperar confirmación, añadiendo que «el plan se puede modificar más tarde». Solo detente y consulta si los resultados especificados no respaldan la afirmación o si hay conflictos entre las especificaciones.

Paso 4 — Fijar el estilo común

  • Copia nfig.py a paper_figures/src/ (para que los scripts de figura se puedan reejecutar sin el skill).
  • En paper_figures/figure_style.json se fijan los métodos/condiciones → colores, marcadores, estilos de línea para todo el artículo. Como el significado de los colores cambia de una figura a otra y obliga al lector a releer la leyenda cada vez, usa esto en todas las figuras.
import style                      # paper_figures/src/style.py (ruta independiente del lugar de ejecución)
pal = nfig.Palette.load_or_build(style.PALETTE,
        proposed=["Ours"], highlight=["SOTA-X"],
        baselines=["Base A", "Base B"], references=["Oracle"])
  • proposed = color de acento (rojo bermellón con saturación reducida), highlight = solo el método comparativo más fuerte en azul, demás métodos comparativos = escalas de grises + marcadores/tipo de línea, reference (valor teórico, cota superior, nivel de azar) = línea discontinua negra.
  • Las asignaciones existentes no cambian; los nuevos nombres se añaden. Otras categorías (p. ej., conjuntos de datos) no reciclan el mismo color; se distinguen mediante posición, división de paneles o marcadores.
  • Las «reglas de visualización» compartidas por todas las figuras se concentran en un solo lugar: paper_figures/src/style.py (copia de assets/style_template.py), que se importa desde cada script de figura: nombre en datos → nombre mostrado ("PISurr (ours)" → "PISurr"), rangos de color para la misma magnitud (p. ej., TEMP_LIM = (300, 345), ERR_LIM = (0, 6)), etiquetas de ejes con unidades. Escribirlas figura por figura provoca desviaciones.

Paso 5 — Trazado

Por regla general, vuelve a dibujar desde los datos originales con nfig. Pegar PNG existentes no unifica fuentes, grosores de línea ni colores, y la reducción de tamaño tiende a dejar el texto por debajo de 5 pt. Elige el formato de gráfico en references/charts.md.

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))   # funciona desde cualquier lugar
import nfig
nfig.use_style()                                          # Arial 7/6 pt, eje 0.5 pt, TrueType 42
fig, axd = nfig.figure("double", 120, mosaic="aab;cde")  # dibuja en el tamaño final de publicación
# ... cada panel (recetas de charts.md) ...
nfig.shared_legend(fig, pal.handles(["Ours", "SOTA-X", "Base A"]))  # una sola leyenda para toda la figura
nfig.label_panels(fig, axd)          # llamar al final: a, b, c… 8 pt negrita, alineado por filas y columnas
nfig.save(fig, "paper_figures/fig2")       # .pdf/.svg/.png + informe de QA automático

label_panels fija el diseño (lo hace inmutable), así que añade leyendas, anotaciones y barras de color antes de llamarlo.

  • 1 figura = 1 script (paper_figures/src/fig2.py). Debe ser reproducible desde la carga de datos hasta el guardado.
  • Dibuja en el tamaño final; no reduzcas después. No uses bbox_inches="tight" porque varía el ancho.
  • Coloca el panel hero como el más grande, en la esquina superior izquierda o en la fila superior. Los gráficos del mismo tipo deben tener el mismo tamaño, rango de ejes y marcas.
  • Si las filas tienen diferentes tipos de panel (banda de diagrama esquemático / columna de imágenes o mapas / gráficos), no uses un único mosaico; en su lugar, usa nfig.figure("double", 120, rows=[("a", 0.8), ("bcdef", 1), ("g", 1)]) para componer fila por fila. Con una sola cuadrícula, el margen de las etiquetas de las marcas de una columna se aplica también a otras filas de la misma columna, aplastando imágenes o mapas. Si las filas son del mismo tipo, mantén un solo mosaico (los bordes de las columnas se alinean).
  • Para campos (mapas de temperatura, error, etc.) usa nfig.field (rangos de color comunes en style.py) + nfig.colorbar; para la misma magnitud, una sola barra de color. Las fotografías o imágenes de microscopio se insertan con nfig.image_panel.
  • Paneles que no se pueden volver a dibujar (diagramas esquemáticos de herramientas externas, imágenes de microscopio, figuras cuyos datos ya no existen):
    • Si son pocos, intégralos con nfig.image_panel(ax, path) (se rasterizan).
    • Si se quiere mantener en vector, combina los PDF de los paneles dibujados con nfig y los PDF externos usando scripts/assemble.py (assets/layout_example.json; las rutas son relativas al JSON). Los paneles de nfig deben dibujarse con las mismas dimensiones (mm) que la celda final para que la escala de reducción sea ≈1. Ajusta la relación de celdas y la altura hasta que desaparezcan los informes de «text below 5 pt», «below 300 dpi» y «cell mostly empty».
    • Informa al usuario de la razón por la que no se pudo volver a dibujar y de que se podría completar si se dispusiera de los datos originales.
  • Honestidad de los datos: no alteres valores, no selecciones solo los resultados convenientes, las barras empiezan en 0, no recortes los ejes para exagerar las diferencias. Las imágenes solo se pueden ajustar y recortar de manera uniforme (no se permiten manipulaciones parciales, composiciones ni ediciones con IA generativa).

Paso 6 — Ciclo de QA y corrección (mínimo 2 rondas)

  1. Verificación automática: Además del informe de nfig.save, ejecuta python <SKILL_DIR>/scripts/check_figure.py paper_figures/fig2.pdf. Corrige todos los ERROR; solo conserva los WARN si hay una intención justificada y registra el motivo.
  2. Inspección visual: Lee paper_figures/qa/fig2_preview.png (tamaño final equivalente) y fig2_access.png (simulación de daltonismo protanopía/deuteranopía y escala de grises). Revisa la lista de verificación final de references/guidelines.md:
    • ¿La afirmación se entiende en 3 segundos?
    • ¿El hero es lo más visible?
    • ¿Se lee de arriba a la izquierda a abajo a la derecha?
    • ¿Hay superposiciones o desbordamientos de texto/líneas? ¿Desalineaciones?
    • ¿Hay espacios en blanco sin sentido o demasiado apretado?
    • ¿Se distingue en daltonismo y en escala de grises?
  3. Corrige, regenera y vuelve a verificar. Finalmente, pregúntate desde el punto de vista de un revisor: «¿Esta figura y su leyenda por sí solas convencen de la afirmación?»

Paso 7 — Leyenda, tabla y entrega

  • Escribe la leyenda en paper_figures/captions.md siguiendo el formato de references/captions-tables.md: (frase título en negrita = afirmación → descripción de cada panel en orden → definición de símbolos, colores, abreviaturas → n, barras de error, pruebas estadísticas).
  • Las comparaciones numéricas precisas van en una tabla: scripts/make_table.py (booktabs, sin líneas verticales, solo el mejor valor en negrita). Los datos en formato largo (1 fila por semilla) se pueden resumir directamente con --groupby y --stat como media ± desviación estándar y n.
  • Informe al usuario: lista de archivos creados, afirmación y composición de cada figura, resultados enviados a SI con su motivo, [AUTHOR TODO] (información estadística pendiente, etc.), WARN conservados y su motivo.

Ubicación de salida (por defecto)

Para no mezclarse ni sobrescribir archivos existentes del usuario (como figures/), la salida se agrupa en paper_figures/. Si el usuario especifica otra ubicación, se respeta.

paper_figures/
├── figure_plan.md  figure_style.json  captions.md
├── src/            nfig.py, fig1.py, fig2.py, ...
├── fig1.pdf .svg .png, fig2.*, ...
├── tables/         table1.tex, table1.md
├── qa/             *_preview.png, *_access.png
└── _inventory/     inventory.md, contact_sheet_*.png

Cuándo dudar

  • Decide qué mostrar según si es evidencia de la afirmación. Los resultados que no sean evidencia, por muy costosos que hayan sido, van a SI.
  • Para mejoras numéricas, combínalas siempre con un ejemplo concreto que muestre qué significan en la práctica.
  • Mostrar no solo los mejores resultados, sino también condiciones de aplicación, limitaciones y fracasos, aumenta la credibilidad de la afirmación.
  • Ante la duda, elige la opción más simple: reduce colores, reduce texto (la explicación va a la leyenda), comparte leyendas.

Skills relacionados