CommunityImagegithub.com

DrNbnonono/paper-figures

Concevoir, dessiner et vérifier des figures pour les articles de sécurité/systèmes (IEEE S&P, USENIX Security, CCS, NDSS, revues, IEEE S&P Magazine), dans le style des meilleures conférences top-4. Utilisez-le pour 画图/作图/图表设计/论文配图, choisir le bon graphique pour une affirmation, rendre une figure prête pour l'impression, rédiger des légendes qui énoncent le message clé, ou convertir une figure matplotlib en PDF vectoriel prêt pour la soumission. Livré avec des exemples exécutables utilisant des données synthétiques (examples/), un module de style matplotlib (scripts/figure_style.py), un générateur (scripts/make_examples.py) et un vérificateur de pré-soumission (scripts/check_figure.py).

Qu'est-ce que paper-figures ?

Cette compétence est conçue pour les chercheurs et ingénieurs en sécurité/systèmes qui doivent produire des figures de qualité publication, alignées sur le style des conférences top-4 (S&P, USENIX Security, CCS, NDSS). Elle fournit une méthodologie complète, de la conception à la vérification, en passant par l'encodage visuel, le style et l'exportation. La compétence inclut un module de style matplotlib (figure_style.py), un générateur d'exemples (make_examples.py) et un vérificateur de pré-soumission (check_figure.py) qui teste la lisibilité en niveaux de gris et pour le daltonisme. Elle est utile pour tout chercheur souhaitant améliorer la clarté et l'impact de ses figures, en respectant des contraintes strictes : un message par figure, vecteur, polices lisibles à 7 pt, palette Okabe-Ito, et légendes qui énoncent le résultat clé. Le SKILL.md détaille chaque étape, des principes fondamentaux aux anti-patrons, en passant par un budget d'éléments visuels et des vérifications de type reviewer.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DrNbnonono/skills/tree/HEAD/paper-figures

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Figures d'article

Une figure est un argument rendu visible. Elle a sa place lorsqu'un lecteur qui la regarde pendant cinq secondes, avant de lire la légende, peut énoncer l'affirmation qu'elle fait. Tout dans cette compétence sert ce test.

Le style qu'elle encode est celui que partagent les articles solides de S&P, USENIX Security, CCS et NDSS : petites, vectorielles, figures sur deux colonnes ; peu d'éléments visuels ; étiquettes directes ; couleurs adaptées à l'impression ; légendes qui énoncent le message clé plutôt que de décrire les axes.

Principe fondamental

Une figure = une affirmation = un message dans la légende.

Si deux affirmations doivent être montrées, dessinez deux panneaux ou deux figures. Une figure qui montre trois choses est lue comme n'en montrant aucune.

Incontournables

  1. Un message par figure. La première phrase de la légende l'énonce ; le graphique le soutient.
  2. Dessiner à la taille d'impression. Une figure sur une colonne fait 3,5 po de large (IEEE), 3,33 po (ACM sigconf), 3,4 po (USENIX). Ne dessinez jamais grand et ne réduisez pas dans LaTeX : les polices rétrécissent en dessous du seuil de 7 pt.
  3. Sortie vectorielle (.pdf depuis matplotlib) pour tout ce qui contient du texte ou des lignes. Rastérisation à 300 dpi uniquement pour les photographies et les captures d'écran.
  4. Polices ≥ 7 pt à la taille d'impression ; étiquettes d'axe 8 pt, étiquettes de graduation 7 pt.
  5. Couleur adaptée à l'impression : palette Okabe–Ito, rien n'est distingué uniquement par la couleur, et la figure doit survivre au niveau de gris (scripts/check_figure.py --preview).
  6. Pas d'axes trompeurs : les diagrammes à barres commencent à zéro ; les échelles logarithmiques sont étiquetées ; pas d'axe y tronqué pour dramatiser une différence ; pas de double axe y sans raison explicite et énoncée.
  7. Montrer l'incertitude là où l'affirmation est quantitative : intervalles de confiance, barres d'erreur ou n dans la légende. Une estimation ponctuelle sans dénominateur n'est pas un résultat.
  8. La légende énonce ce qu'il faut remarquer, puis les unités, puis n. Ce n'est pas une liste de couleurs.
  9. Pas d'ornements inutiles : pas de 3-D, pas d'ombres, pas de dégradés comme décoration, pas de cartes arc-en-ciel, pas de fonds de couleur, pas de lignes de quadrillage qui masquent les données.
  10. Reproductible : le script qui a généré la figure se trouve à côté dans le dépôt, avec le fichier de données ou une graine aléatoire. Une figure que personne ne peut régénérer est un passif au stade camera-ready.

Étape 0 — Décider d'abord de l'affirmation

Écrivez une phrase, en mots, que la figure doit rendre évidente :

« Le code d'exploitation public apparaît maintenant plus rapidement que les avis : le rapport artefact/avis sur 30 jours est passé de 0,63 à 1,83 à travers quatre époques. »

Si vous ne pouvez pas écrire cette phrase sans « et », vous avez deux figures.

Remplissez templates/figure-brief.md avant de toucher à matplotlib. Cela prend deux minutes et évite la reprise la plus courante : une belle figure qui montre la mauvaise quantité.

Étape 1 — Choisir l'encodage à partir de l'affirmation

Lisez references/encoding-guide.md. La version courte :

Type d'affirmationEncodageÀ éviter
Distribution / vitesseCDF (en escalier), violon, boîte, bandeBarre de moyennes sans dispersion
Comparaison appariéeHaltère, pente, points appariésDeux barres flottantes
Composition dans le tempsAire empilée, petits multiplesCamembert, camembert 3-D
ClassementBarres horizontales triées, nuage de pointsBarres non triées, arc-en-ciel
Compromis à deux variablesNuage de points + frontière de ParetoBulles avec tailles illisibles
Matrice / couvertureCarte de chaleur avec carte uniforme perceptuellement, valeurs dans les cellulesCarte de chaleur arc-en-ciel sans valeurs
Processus / chronologieCouloir de nage, chronologie, diagramme de séquenceUn tableau de dates en prose
Taxonomie / décisionArbre étiqueté, matrice de cellules rempliesTexte à puces imbriqué

Étape 2 — Dessiner avec le style partagé

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 adaptés à l'impression
fig, ax = new_fig(3.5, 2.3)         # Colonne unique, rapport d'aspect correct
ax.plot(x, y, color=SERIES[0], label="Pré-IA")
save(fig, "figs/fig1_cdf")          # Écrit .pdf (pour LaTeX) + .png (aperçu)

Ajustez le style globalement, jamais par figure : deux figures dans un même article avec des polices ou des épaisseurs de ligne différentes se lisent comme deux articles différents.

references/style-spec.md liste chaque paramètre et la raison de son réglage.

Étape 3 — Étiqueter directement, légende en dernier

  • Placez le nom de la série à la fin de sa ligne, ou sur le graphique, plutôt que dans une boîte de légende. N'utilisez une légende que lorsque les étiquettes directes entreraient en collision (voir examples/fig01_cdf.png).
  • Étiquettes de panneau A, B, C en gras en haut à gauche, référencées depuis la légende.
  • Étiquettes d'axe : quantité + unité + échelle (Jours depuis la divulgation (échelle log)).
  • Ensuite, rédigez la légende avec references/captions.md : message clé → ce que montrent les axes → unités/n/IC → la seule mise en garde qu'un lecteur ne doit pas manquer.

Étape 4 — Rendre adapté à l'impression

  • Palette : SERIES dans scripts/figure_style.py (Okabe–Ito). Données séquentielles : cividis, jamais jet. Divergentes : RdBu_r, uniquement autour d'un zéro significatif.
  • Encodez aussi par la forme : les marqueurs et les styles de ligne varient avec la série, de sorte que la figure survive à l'impression en niveaux de gris et aux relecteurs daltoniens.
  • Exécutez le vérificateur :
python scripts/check_figure.py figs/fig1_cdf.png --preview

Il signale la taille/dpi, la palette chromatique, la séparation en niveaux de gris et pour la deutéranopie, et écrit fig1_cdf_gray.png / fig1_cdf_cvd.png. Regardez les deux.

references/accessibility.md couvre les détails (contraste, CVD, texte alternatif).

Étape 5 — Exporter et inclure

  • Exportez le PDF vectoriel avec des polices TrueType intégrées (pdf.fonttype = 42, déjà défini).
  • Incluez à la largeur d'impression : \includegraphics[width=\columnwidth]{figs/fig1_cdf.pdf}.
  • Vérifiez le PDF compilé à 100 % : pas de texte en dessous de 7 pt, pas d'étiquettes tronquées, pas de figure plus haute qu'une demi-colonne sauf s'il s'agit de la figure conceptuelle principale de l'article.
  • references/production.md couvre l'inclusion LaTeX, l'intégration des polices et la disposition des fichiers.

Étape 6 — Vérifier comme un relecteur

  1. Test des cinq secondes : montrez la figure seule à quelqu'un ; peut-il énoncer l'affirmation ?
  2. Test de la légende : la première phrase doit être l'affirmation, pas « La figure 3 montre… ».
  3. Test en niveaux de gris : les deux aperçus se lisent correctement.
  4. Test de zoom : à 100 % du PDF compilé, chaque étiquette est lisible.
  5. Test d'intégrité : les nombres dans la figure correspondent au tableau et au texte ; l'axe n'est pas tronqué ; les barres d'erreur sont définies dans la légende.
  6. Test de réutilisation : supprimez le PNG ; le script le régénère-t-il à l'identique (octet par octet) ? Il devrait.

Budget d'éléments visuels

Catégorie de conférenceNombre total d'éléments visuelsRemarques
Conférence top-46–10Une figure conceptuelle, une chronologie, des tableaux de résultats ; chaque élément est référencé dans le texte
Magazine4–6Un message par élément ; encadrés au lieu d'annexes
Revue8–12Plus de place, mêmes règles

Si une figure n'est pas référencée avec une affirmation dans le texte (« La figure 5 montre que X »), supprimez-la ou réécrivez la phrase.

Anti-patrons

Anti-patronPourquoi ça échoue
Carte de couleurs arc-en-ciel/jetNon ordonnée perceptuellement ; valeurs trompeuses ; illisible en niveaux de gris
Barres/camemberts 3-D ou ombrésDécoration qui fausse la comparaison
Camembert avec >3 partsLes humains comparent mal les angles ; utilisez des barres triées
Double axe yInvite une affirmation de corrélation que les données ne soutiennent pas ; utilisez deux panneaux
Axe y tronqué sur les barresExagère les différences ; un relecteur le remarquera
Boîte de légende avec 6 entréesOblige à faire correspondre les couleurs ; utilisez des étiquettes directes ou des petits multiples
Texte minuscule réduit dans LaTeXLes polices tombent en dessous de 7 pt ; la figure devient un bruit gris
Légende qui liste les couleurs« La ligne bleue montre… » n'apprend rien au lecteur qu'il ne puisse déjà voir
Capture d'écran d'un tableauPas vectoriel, pas modifiable, pas accessible
Figure qui répète un tableauGaspillage d'un élément visuel ; gardez celui qui soutient l'affirmation
Axe log non étiquetéLe lecteur ne peut pas comparer les pentes sur plusieurs ordres de grandeur
n / barres d'erreur manquantsUne estimation ponctuelle sans incertitude n'est pas une preuve

Carte des ressources

FichierUtilisation
references/venue-figure-profiles.mdCe que les conférences top-4 attendent, largeurs de colonnes, règles de légende/placement
references/encoding-guide.mdCorrespondance affirmation → graphique, échelles logarithmiques, incertitude, quand un tableau l'emporte
references/style-spec.mdChaque paramètre matplotlib avec sa raison ; codes hexadécimaux de la palette
references/captions.mdFormule de légende et exemples avant/après
references/accessibility.mdSécurité pour le daltonisme et les niveaux de gris, contraste, texte alternatif
references/production.mdExportation, inclusion LaTeX, polices, disposition des fichiers, reproductibilité
references/anti-patterns.mdCe qu'il faut supprimer, avec l'exemple qui le montre
scripts/figure_style.pyrcParams, palette Okabe–Ito, new_fig, save, panel_label
scripts/check_figure.pyVérification taille/dpi, aperçus en niveaux de gris et deutéranopie, rapport de palette
scripts/make_examples.pyGénère chaque figure d'exemple (données synthétiques)
examples/Images de référence : à quoi ressemble un bon exemple, plus une paire mauvais vs bon
templates/figure-brief.mdAide-mémoire d'une page avant de dessiner

Skills associés