CommunityImagengithub.com

DrNbnonono/paper-figures

Diseña, dibuja y verifica figuras para artículos de seguridad/sistemas (IEEE S&P, USENIX Security, CCS, NDSS, revistas, IEEE S&P Magazine), en el estilo de los mejores artículos del top-4. Úsalo para 画图/作图/图表设计/论文配图, elegir el gráfico adecuado para una afirmación, hacer una figura preparada para impresión, escribir leyendas que expresen la conclusión o convertir una figura de matplotlib en un PDF vectorial listo para cámara. Incluye ejemplos ejecutables con datos sintéticos (examples/), un módulo de estilo matplotlib (scripts/figure_style.py), un generador (scripts/make_examples.py) y un verificador previo al envío (scripts/check_figure.py).

¿Qué es paper-figures?

Este skill proporciona un flujo de trabajo completo para crear figuras de alta calidad para artículos de investigación en seguridad y sistemas, siguiendo los estándares de las principales conferencias (S&P, USENIX Security, CCS, NDSS). Está diseñado para ayudar tanto a investigadores como a asistentes de IA a generar figuras vectoriales pequeñas, de dos columnas, con etiquetas directas, colores seguros para impresión y leyendas que comunican la conclusión principal en lugar de solo describir los ejes. El skill incluye un módulo de estilo matplotlib listo para usar, un generador de ejemplos con datos sintéticos, y un verificador que evalúa el tamaño, la paleta cromática, la legibilidad en escala de grises y en condiciones de daltonismo. Se puede utilizar con Claude Code, Cursor y otros asistentes de IA que soporten la ejecución de scripts de Python y la revisión de figuras mediante comandos integrados.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DrNbnonono/skills/tree/HEAD/paper-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 para artículos

Una figura es un argumento hecho visible. Se gana su lugar cuando un lector que la mira durante cinco segundos, antes de leer la leyenda, puede expresar la afirmación que hace. Todo en este skill sirve para esa prueba.

El estilo que codifica es el que comparten los artículos sólidos de S&P, USENIX Security, CCS y NDSS: pequeño, vectorial, figuras de dos columnas; pocos elementos visuales; etiquetas directas; color seguro para impresión; leyendas que expresan la conclusión en lugar de describir los ejes.

Principio fundamental

Una figura = una afirmación = un mensaje en la leyenda.

Si es necesario mostrar dos afirmaciones, dibuja dos paneles o dos figuras. Una figura que muestra tres cosas no se lee como ninguna de ellas.

Puntos no negociables

  1. Un mensaje por figura. La primera frase de la leyenda lo expresa; el gráfico lo respalda.
  2. Dibujar al tamaño de impresión. Una figura de una columna mide 3.5 pulgadas de ancho (IEEE), 3.33 pulgadas (ACM sigconf), 3.4 pulgadas (USENIX). Nunca dibujes grande y reduzcas en LaTeX: las fuentes se reducen por debajo del mínimo de 7 pt.
  3. Salida vectorial (.pdf desde matplotlib) para cualquier cosa con texto o líneas. Solo raster a 300 dpi para fotografías y capturas de pantalla.
  4. Fuentes ≥ 7 pt al tamaño de impresión; etiquetas de ejes a 8 pt, etiquetas de marcas a 7 pt.
  5. Color seguro para impresión: paleta Okabe-Ito, nada distinguido solo por color, y la figura debe sobrevivir a escala de grises (scripts/check_figure.py --preview).
  6. Sin ejes engañosos: los gráficos de barras empiezan en cero; las escalas logarítmicas están etiquetadas; sin eje Y truncado para exagerar una diferencia; sin ejes Y duales sin una razón explícita y declarada.
  7. Mostrar incertidumbre donde la afirmación es cuantitativa: bandas de IC, barras de error, o n en la leyenda. Una estimación puntual sin denominador no es un resultado.
  8. La leyenda indica qué notar, luego las unidades, luego n. No es una lista de colores.
  9. Sin basura gráfica: sin 3D, sin sombras, sin degradados decorativos, sin mapas de arcoíris, sin rellenos de fondo, sin líneas de cuadrícula que compitan con los datos.
  10. Reproducible: el script que generó la figura vive junto a ella en el repositorio, con el archivo de datos o una semilla. Una figura que nadie pueda regenerar es un pasivo al llegar a la versión final.

Paso 0 — Decide primero la afirmación

Escribe una oración, en palabras, que la figura debe hacer evidente:

"El código de exploit público ahora aparece más rápido que los avisos: la proporción artefacto-a-aviso a 30 días aumentó de 0.63 a 1.83 en cuatro épocas."

Si no puedes escribir esa oración sin "y", tienes dos figuras.

Completa templates/figure-brief.md antes de tocar matplotlib. Te llevará dos minutos y evitará la reelaboración más común: una figura hermosa que muestra la cantidad equivocada.

Paso 1 — Elige la codificación a partir de la afirmación

Lee references/encoding-guide.md. La versión corta:

Tipo de afirmaciónCodificaciónEvitar
Distribución / qué tan rápidoCDF (escalonada), violín, caja, tirabarra de medias sin dispersión
Comparación pareadapesa, pendiente, puntos pareadosdos barras flotantes
Composición a lo largo del tiempoárea apilada, múltiplos pequeñospastel, pastel 3D
Rankingbarras horizontales ordenadas, gráfico de puntosbarras desordenadas, arcoíris
Compensación de dos variablesdispersión + frontera de Paretoburbuja con tamaños ilegibles
Matriz / coberturamapa de calor con mapa uniforme perceptual, valores en celdamapa de calor arcoíris sin valores
Proceso / cronologíacarril de natación, cronología, diagrama de secuenciatabla de fechas en prosa
Taxonomía / decisiónárbol etiquetado, matriz de celdas pobladastexto anidado con viñetas

Paso 2 — Dibuja con el estilo compartido

import sys; sys.path.insert(0, "scripts")
from figure_style import apply_style, new_fig, save, SERIES, panel_label

apply_style()                       # base 8 pt, Okabe-Ito, rcParams seguros para impresión
fig, ax = new_fig(3.5, 2.3)         # una columna, relación de aspecto correcta
ax.plot(x, y, color=SERIES[0], label="Pre-IA")
save(fig, "figs/fig1_cdf")          # escribe .pdf (para LaTeX) + .png (vista previa)

Ajusta el estilo globalmente, nunca por figura: dos figuras en un mismo artículo con fuentes diferentes o grosores de línea diferentes se leen como dos artículos diferentes.

references/style-spec.md enumera cada ajuste y por qué está configurado así.

Paso 3 — Etiqueta directamente, leyenda al final

  • Coloca el nombre de la serie al final de su línea, o en la gráfica, en lugar de en un cuadro de leyenda. Usa una leyenda solo cuando las etiquetas directas chocarían (ver examples/fig01_cdf.png).
  • Etiquetas de panel A, B, C en negrita en la parte superior izquierda, referenciadas desde la leyenda.
  • Etiquetas de ejes: cantidad + unidad + escala (Días desde la divulgación (escala logarítmica)).
  • Luego escribe la leyenda con references/captions.md: conclusión → qué muestran los ejes → unidades/n/IC → la única advertencia que el lector no debe perderse.

Paso 4 — Hazlo seguro para impresión

  • Paleta: SERIES en scripts/figure_style.py (Okabe-Ito). Datos secuenciales: cividis, nunca jet. Divergentes: RdBu_r, solo alrededor de un cero significativo.
  • Codifica también por forma: los marcadores y estilos de línea varían con la serie, así la figura sobrevive a la impresión en escala de grises y a los revisores daltónicos.
  • Ejecuta el verificador:
python scripts/check_figure.py figs/fig1_cdf.png --preview

Informa tamaño/dpi, la paleta cromática, la separación en escala de grises y deuteranopia, y escribe fig1_cdf_gray.png / fig1_cdf_cvd.png. Mira ambas.

references/accessibility.md cubre los detalles (contraste, CVD, texto alternativo).

Paso 5 — Exporta e incluye

  • Exporta PDF vectorial con fuentes TrueType incrustadas (pdf.fonttype = 42, ya configurado).
  • Incluye al ancho de impresión: \includegraphics[width=\columnwidth]{figs/fig1_cdf.pdf}.
  • Verifica el PDF compilado al 100 %: sin texto por debajo de 7 pt, sin etiquetas recortadas, sin figura más alta que media columna a menos que sea la figura conceptual principal del artículo.
  • references/production.md cubre inclusión en LaTeX, incrustación de fuentes y disposición de archivos.

Paso 6 — Verifica como revisor

  1. Prueba de cinco segundos: muestra la figura sola a alguien; ¿puede expresar la afirmación?
  2. Prueba de leyenda: la primera frase debe ser la afirmación, no "La Figura 3 muestra…".
  3. Prueba de escala de grises: ambas vistas previas se leen correctamente.
  4. Prueba de zoom: al 100 % del PDF compilado, cada etiqueta es legible.
  5. Prueba de integridad: los números en la figura coinciden con la tabla y el texto; el eje no está truncado; las barras de error están definidas en la leyenda.
  6. Prueba de reutilización: elimina el PNG; ¿el script lo regenera de manera idéntica byte por byte? Debería.

Presupuesto de elementos visuales

Clase de foroElementos visuales totalesNotas
Conferencia top-46–10Una figura conceptual, una cronología, tablas de resultados; cada elemento referenciado en el texto
Revista4–6Un mensaje por elemento; barras laterales en lugar de apéndices
Revista académica8–12Más espacio, mismas reglas

Si una figura no está referenciada con una afirmación en el texto ("La Figura 5 muestra que X"), elimínala o reescribe la frase.

Antipatrones

AntipatrónPor qué falla
Mapa de color arcoíris/jetNo perceptualmento ordenado; valores engañosos; ilegible en escala de grises
Barras/pasteles 3D o con sombraDecoración que distorsiona la comparación
Pastel con >3 rebanadasLos humanos comparan ángulos mal; usa barras ordenadas
Doble eje YInvita a una afirmación de correlación que los datos no respaldan; usa dos paneles
Eje Y truncado en barrasExagera diferencias; un revisor lo notará
Cuadro de leyenda con 6 entradasObliga a emparejar colores; usa etiquetas directas o múltiplos pequeños
Texto pequeño reducido en LaTeXLas fuentes caen por debajo de 7 pt; la figura se vuelve ruido gris
Leyenda que lista colores"La línea azul muestra…" no le dice al lector nada que no pueda ver
Captura de pantalla de una tablaNo es vectorial, no es editable, no es accesible
Figura que repite una tablaDesperdicio de un elemento visual; quédate con la que respalda la afirmación
Eje logarítmico sin etiquetarEl lector no puede comparar pendientes entre décadas
Falta de n / barras de errorUna estimación puntual sin incertidumbre no es evidencia

Mapa de recursos

ArchivoUso
references/venue-figure-profiles.mdLo que esperan los foros top-4, anchos de columna, reglas de leyenda/colocación
references/encoding-guide.mdMapeo afirmación → gráfico, escalas logarítmicas, incertidumbre, cuándo gana una tabla
references/style-spec.mdCada ajuste de matplotlib con su razón; códigos hex de paleta
references/captions.mdFórmula de leyenda y ejemplos antes/después
references/accessibility.mdSeguridad para daltonismo y escala de grises, contraste, texto alternativo
references/production.mdExportación, inclusión en LaTeX, fuentes, disposición de archivos, reproducibilidad
references/anti-patterns.mdQué eliminar, con el ejemplo que lo muestra
scripts/figure_style.pyrcParams, paleta Okabe-Ito, new_fig, save, panel_label
scripts/check_figure.pyVerificación de tamaño/dpi, vistas previas en escala de grises y deuteranopia, informe de paleta
scripts/make_examples.pyGenera cada figura de ejemplo (datos sintéticos)
examples/Imágenes de referencia: cómo se ve lo bueno, más un par bueno vs. malo
templates/figure-brief.mdResumen de una página antes de dibujar

Skills relacionados