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
- Un message par figure. La première phrase de la légende l'énonce ; le graphique le soutient.
- 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.
- Sortie vectorielle (
.pdfdepuis matplotlib) pour tout ce qui contient du texte ou des lignes. Rastérisation à 300 dpi uniquement pour les photographies et les captures d'écran. - Polices ≥ 7 pt à la taille d'impression ; étiquettes d'axe 8 pt, étiquettes de graduation 7 pt.
- 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). - 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.
- 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.
- La légende énonce ce qu'il faut remarquer, puis les unités, puis n. Ce n'est pas une liste de couleurs.
- 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.
- 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'affirmation | Encodage | À éviter |
|---|---|---|
| Distribution / vitesse | CDF (en escalier), violon, boîte, bande | Barre de moyennes sans dispersion |
| Comparaison appariée | Haltère, pente, points appariés | Deux barres flottantes |
| Composition dans le temps | Aire empilée, petits multiples | Camembert, camembert 3-D |
| Classement | Barres horizontales triées, nuage de points | Barres non triées, arc-en-ciel |
| Compromis à deux variables | Nuage de points + frontière de Pareto | Bulles avec tailles illisibles |
| Matrice / couverture | Carte de chaleur avec carte uniforme perceptuellement, valeurs dans les cellules | Carte de chaleur arc-en-ciel sans valeurs |
| Processus / chronologie | Couloir de nage, chronologie, diagramme de séquence | Un tableau de dates en prose |
| Taxonomie / décision | Arbre étiqueté, matrice de cellules remplies | Texte à 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 :
SERIESdansscripts/figure_style.py(Okabe–Ito). Données séquentielles :cividis, jamaisjet. 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.mdcouvre l'inclusion LaTeX, l'intégration des polices et la disposition des fichiers.
Étape 6 — Vérifier comme un relecteur
- Test des cinq secondes : montrez la figure seule à quelqu'un ; peut-il énoncer l'affirmation ?
- Test de la légende : la première phrase doit être l'affirmation, pas « La figure 3 montre… ».
- Test en niveaux de gris : les deux aperçus se lisent correctement.
- Test de zoom : à 100 % du PDF compilé, chaque étiquette est lisible.
- 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.
- 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érence | Nombre total d'éléments visuels | Remarques |
|---|---|---|
| Conférence top-4 | 6–10 | Une figure conceptuelle, une chronologie, des tableaux de résultats ; chaque élément est référencé dans le texte |
| Magazine | 4–6 | Un message par élément ; encadrés au lieu d'annexes |
| Revue | 8–12 | Plus 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-patron | Pourquoi ça échoue |
|---|---|
| Carte de couleurs arc-en-ciel/jet | Non ordonnée perceptuellement ; valeurs trompeuses ; illisible en niveaux de gris |
| Barres/camemberts 3-D ou ombrés | Décoration qui fausse la comparaison |
| Camembert avec >3 parts | Les humains comparent mal les angles ; utilisez des barres triées |
| Double axe y | Invite une affirmation de corrélation que les données ne soutiennent pas ; utilisez deux panneaux |
| Axe y tronqué sur les barres | Exagère les différences ; un relecteur le remarquera |
| Boîte de légende avec 6 entrées | Oblige à faire correspondre les couleurs ; utilisez des étiquettes directes ou des petits multiples |
| Texte minuscule réduit dans LaTeX | Les 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 tableau | Pas vectoriel, pas modifiable, pas accessible |
| Figure qui répète un tableau | Gaspillage 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 manquants | Une estimation ponctuelle sans incertitude n'est pas une preuve |
Carte des ressources
| Fichier | Utilisation |
|---|---|
references/venue-figure-profiles.md | Ce que les conférences top-4 attendent, largeurs de colonnes, règles de légende/placement |
references/encoding-guide.md | Correspondance affirmation → graphique, échelles logarithmiques, incertitude, quand un tableau l'emporte |
references/style-spec.md | Chaque paramètre matplotlib avec sa raison ; codes hexadécimaux de la palette |
references/captions.md | Formule de légende et exemples avant/après |
references/accessibility.md | Sécurité pour le daltonisme et les niveaux de gris, contraste, texte alternatif |
references/production.md | Exportation, inclusion LaTeX, polices, disposition des fichiers, reproductibilité |
references/anti-patterns.md | Ce qu'il faut supprimer, avec l'exemple qui le montre |
scripts/figure_style.py | rcParams, palette Okabe–Ito, new_fig, save, panel_label |
scripts/check_figure.py | Vérification taille/dpi, aperçus en niveaux de gris et deutéranopie, rapport de palette |
scripts/make_examples.py | Gé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.md | Aide-mémoire d'une page avant de dessiner |