Use whenever generating figures or tables for a research paper — enforces publication-quality visual standards including style consistency, readability, accessibility, and venue-appropriate formatting
Figures are the first thing reviewers look at. A sloppy figure signals sloppy science. This skill defines mandatory quality standards for every figure and table produced during Phase 4 (experiment execution) and Phase 5 (results integration), and enforced again during Phase 6 (paper writing).
Invoke this skill before generating any figure intended for a paper.
Universal Figure Standards
Resolution and Format
Property
Requirement
Format
Vector (PDF or SVG) for plots; PNG at ≥300 DPI only for raster images (photos, heatmaps)
Minimum DPI
300 for raster, vector preferred for all line/bar/scatter plots
File format for LaTeX
PDF (first choice) or EPS; avoid PNG/JPG for plots
Size
Match column width of target venue (typically 3.25" single column, 6.875" double column for IEEE/ACM)
Typography
Property
Requirement
Font family
Match venue profile (see Venue-Specific Styles below) — sans-serif for CNS, serif for CS/IEEE
Axis label size
≥ 8pt after scaling to final print size
Tick label size
≥ 7pt after scaling
Legend text size
≥ 7pt after scaling
Figure title
OMIT — do NOT put a title on the figure. The LaTeX \caption{} serves as the title.
Panel labels
Bold lowercase for CNS-style (a, b, c); uppercase for CS/IEEE (A, B, C) — see venue profile
Test: After generating a figure, mentally scale it to its final column width. If any text becomes unreadable at that size, increase the font.
Color
Property
Requirement
Color palette
Match venue profile — Nature palette for CNS, Tableau 10 for CS, see below
Consistency
ALL figures in the same paper must use the SAME color → method mapping
Grayscale fallback
Figures must be distinguishable in grayscale (some venues print in B&W). Use markers/hatching in addition to color
Maximum colors
≤ 8 distinct colors per figure; beyond that, use subplots
Layout and Readability
Property
Requirement
Axis labels
Present on every axis; include units (e.g., "Accuracy (%)", "Time (s)")
Grid lines
Depends on venue profile: subtle for CS, often absent for CNS
Legend placement
Inside the plot area if space allows, otherwise outside. Never overlap data points.
White space
Tight layout (bbox_inches='tight' in matplotlib); no excessive margins
Aspect ratio
Standard ratios (4:3, 16:9, 1:1). Never stretched or squished.
Subplot spacing
Consistent spacing; shared axes where appropriate to save space
What Goes ON the Figure vs. IN LaTeX
ON the figure (in the image file itself):
Axis labels with units
Tick labels
Legend (if multiple series)
Panel labels (a, b, c — positioned top-left of each subplot)
Annotations (arrows, text callouts if needed)
NO figure title (the caption replaces it)
NO caption text
IN LaTeX \caption{}:
What the figure shows (one sentence)
Key takeaway / main observation
Per-panel descriptions for multi-panel figures: "(a) Method comparison on Dataset X. (b) Ablation study..."
Define abbreviations not defined in main text
Statistical details if relevant ("Error bars indicate ± 1 std over 5 seeds")
Must be self-contained: reader should understand the figure from caption alone
LaTeX pattern:
\begin{figure}[t]
\centering
\includegraphics[width=\columnwidth]{figures/main_comparison.pdf}
\caption{Comparison of methods on three benchmarks.
(\textbf{a}) Accuracy on Dataset X. Our method (blue) outperforms all baselines.
(\textbf{b}) Training efficiency. Our method converges 2$\times$ faster.
Error bars indicate $\pm$ 1 std over 5 random seeds.}
\label{fig:main}
\end{figure}
Venue-Specific Figure Styles
Read target_venue from research-anchor.yaml and select the matching profile. If unsure which profile to use, ask the user.
Profile: CNS (Nature, Science, Cell and their sub-journals)
Nature/Science/Cell have a distinctive, recognizable figure aesthetic. Matching it signals professionalism.
If venue is unclear or not listed, ask user: "Which figure style matches your target venue? (1) CNS/Nature style (2) CS conference style (3) IEEE style (4) Other — please describe"
Write the selected profile to src/plot_style.py and use it for ALL figures
Figure Type Selection Guide
Data type
Recommended figure
Avoid
Method A vs B vs C on multiple datasets
Grouped bar chart or table
Pie chart
Performance vs hyperparameter
Line plot with error bands
Scatter without connection
Ablation (component contribution)
Grouped bar chart or stacked bar
Line plot (components aren't ordered)
Training dynamics
Line plot (x: epoch, y: metric) with shaded std
Bar chart
Feature importance / attention
Heatmap with annotated values
3D plots
Distribution comparison
Violin plot or box plot
Overlapping histograms
Embedding visualization
t-SNE/UMAP scatter with class colors
PCA (usually uninformative for high-dim)
Qualitative examples
Grid of input→output pairs
Random cherry-picked singles
Architecture diagram
Clean schematic (tikz, draw.io, or programmatic)
Hand-drawn or overly complex
Confusion matrix
Annotated heatmap with numbers in cells
Plain matrix without annotations
Style Template
At project start, create src/plot_style.py based on the selected venue profile. This file is imported by every plotting script.
import matplotlib.pyplot as plt
import matplotlib as mpl
# ──────────────────────────────────────────────
# SELECT ONE profile based on target venue.
# See Venue-Specific Figure Styles section above.
# Copy the matching STYLE dict and COLORS list here.
# ──────────────────────────────────────────────
# Example: CS conference profile (NeurIPS, ICML, etc.)
STYLE_CONFIG = CS_STYLE # Replace with CNS_STYLE, IEEE_STYLE, etc.
COLORS = CS_COLORS # Replace with NATURE_COLORS, etc.
mpl.rcParams.update(STYLE_CONFIG)
Save as src/plot_style.py and import in every plotting script. This ensures ALL figures have consistent, venue-appropriate style.
Method-Color Mapping
At the start of the project, define a global color mapping and use it everywhere:
Before including ANY figure in the paper, verify every item.
Figure file (the image itself):
Venue profile applied — using the correct style from src/plot_style.py?
Readable at print size — scale to final column width; all text ≥ 7pt (CNS: ≥ 5pt)?
Axis labels present — with units (e.g., "Accuracy (%)", "Time (s)")?
No figure title — title belongs in LaTeX \caption{}, not on the figure
Legend present — if multiple series; not overlapping data?
Panel labels — if multi-panel: bold a, b, c (CNS) or (A), (B), (C) (CS/IEEE) top-left?
Color consistent — same method = same color as all other figures?
Colorblind safe — distinguishable without color (markers, line styles, hatching)?
Error bars / variance — shown where applicable (shaded region or error bars)?
Vector format — PDF/SVG for plots (not PNG/JPG)?
No chartjunk — no 3D effects, no excessive decoration, no rainbow gradients?
White space optimized — tight layout, no giant margins?
LaTeX side (in the .tex file):
\caption{} self-contained — reader understands figure from caption alone, without reading body text?
\caption{} describes each panel — for multi-panel: "(a) ... (b) ..."?
\caption{} states key takeaway — not just "Results on Dataset X" but what the results show?
\caption{} notes statistical details — "Error bars: ± 1 std over 5 seeds" or similar?
\label{fig:xxx} present and descriptive?
\includegraphics width — matches venue column width (\columnwidth or \textwidth)?
Referenced in text — every figure is \ref{}'d in the body text; no orphaned figures?
Anti-Patterns — NEVER Do These
Anti-pattern
Why it's bad
What to do instead
Default matplotlib style (white bg, thin lines, small fonts)
Unreadable at print size
Apply the style template above
Rainbow colormap for categorical data
Perceptually nonlinear, colorblind-hostile
Use qualitative palette (Tableau 10, ColorBrewer)
3D bar charts or pie charts
Distort proportions, waste ink
2D grouped bar chart
Inconsistent colors across figures
Reader can't track methods
Global method-color mapping
Screenshots of terminal output
Unreadable, unprofessional
Proper table or formatted code block
Figures without error bars
Results look unreliable
Always show variance (std, CI, min-max)
Tiny axis labels that need zooming
Will be illegible in print
≥ 8pt at final size
Cherry-picked qualitative examples
Misleading
Show representative range (good + average + failure)
Integration with Workflow
This skill should be invoked:
Phase 4 (experiment-execution): When generating any experimental figure — apply style template, use method-color mapping
Phase 5 (results-integration): When producing the content outline — verify all planned figures meet standards; run the per-figure checklist
Phase 6 (paper-writing): Before including each figure in a .tex file — final quality check; verify LaTeX \includegraphics path and caption
Rationalization Prevention
Excuse
Reality
"I'll fix the figures later"
You won't. Style issues compound. Apply the template from the first plot.
"Default matplotlib looks fine"
On screen at 100%, maybe. At conference poster or PDF zoom, it's unreadable.
"Color doesn't matter"
8% of men are colorblind. Reviewers print in B&W. Color always matters.
"Error bars clutter the plot"
Error bars ARE the data. Without them, your plot is a lie.
"One quick plot is fine for now"
Quick plots become final figures 90% of the time. Do it right the first time.
1---2name: figure-quality-standards3description: Use whenever generating figures or tables for a research paper — enforces publication-quality visual standards including style consistency, readability, accessibility, and venue-appropriate formatting4---56# Figure & Table Quality Standards78## Overview910Figures are the first thing reviewers look at. A sloppy figure signals sloppy science. This skill defines mandatory quality standards for every figure and table produced during Phase 4 (experiment execution) and Phase 5 (results integration), and enforced again during Phase 6 (paper writing).1112**Invoke this skill** before generating any figure intended for a paper.1314## Universal Figure Standards1516### Resolution and Format1718| Property | Requirement |19|----------|------------|20| Format | Vector (PDF or SVG) for plots; PNG at ≥300 DPI only for raster images (photos, heatmaps) |21| Minimum DPI | 300 for raster, vector preferred for all line/bar/scatter plots |22| File format for LaTeX | PDF (first choice) or EPS; avoid PNG/JPG for plots |23| Size | Match column width of target venue (typically 3.25" single column, 6.875" double column for IEEE/ACM) |2425### Typography2627| Property | Requirement |28|----------|------------|29| Font family | **Match venue profile** (see Venue-Specific Styles below) — sans-serif for CNS, serif for CS/IEEE |30| Axis label size | ≥ 8pt after scaling to final print size |31| Tick label size | ≥ 7pt after scaling |32| Legend text size | ≥ 7pt after scaling |33| Figure title | **OMIT** — do NOT put a title on the figure. The LaTeX `\caption{}` serves as the title. |34| Panel labels | Bold lowercase for CNS-style (**a**, **b**, **c**); uppercase for CS/IEEE (**A**, **B**, **C**) — see venue profile |3536**Test:** After generating a figure, mentally scale it to its final column width. If any text becomes unreadable at that size, increase the font.3738### Color3940| Property | Requirement |41|----------|------------|42| Color palette | **Match venue profile** — Nature palette for CNS, Tableau 10 for CS, see below |43| Consistency | ALL figures in the same paper must use the SAME color → method mapping |44| Grayscale fallback | Figures must be distinguishable in grayscale (some venues print in B&W). Use markers/hatching in addition to color |45| Maximum colors | ≤ 8 distinct colors per figure; beyond that, use subplots |4647### Layout and Readability4849| Property | Requirement |50|----------|------------|51| Axis labels | Present on every axis; include units (e.g., "Accuracy (%)", "Time (s)") |52| Grid lines | Depends on venue profile: subtle for CS, often absent for CNS |53| Legend placement | Inside the plot area if space allows, otherwise outside. Never overlap data points. |54| White space | Tight layout (`bbox_inches='tight'` in matplotlib); no excessive margins |55| Aspect ratio | Standard ratios (4:3, 16:9, 1:1). Never stretched or squished. |56| Subplot spacing | Consistent spacing; shared axes where appropriate to save space |5758### What Goes ON the Figure vs. IN LaTeX5960<IMPORTANT>61Figures and captions are SEPARATE things. The figure is an image file (PDF/SVG). The caption is LaTeX text in `\caption{}`. Do NOT confuse them.62</IMPORTANT>6364**ON the figure (in the image file itself):**65- Axis labels with units66- Tick labels67- Legend (if multiple series)68- Panel labels (**a**, **b**, **c** — positioned top-left of each subplot)69- Annotations (arrows, text callouts if needed)70- NO figure title (the caption replaces it)71- NO caption text7273**IN LaTeX `\caption{}`:**74- What the figure shows (one sentence)75- Key takeaway / main observation76- Per-panel descriptions for multi-panel figures: "(**a**) Method comparison on Dataset X. (**b**) Ablation study..."77- Define abbreviations not defined in main text78- Statistical details if relevant ("Error bars indicate ± 1 std over 5 seeds")79- Must be **self-contained**: reader should understand the figure from caption alone8081**LaTeX pattern:**82```latex83\begin{figure}[t]84\centering85\includegraphics[width=\columnwidth]{figures/main_comparison.pdf}86\caption{Comparison of methods on three benchmarks.87(\textbf{a}) Accuracy on Dataset X. Our method (blue) outperforms all baselines.88(\textbf{b}) Training efficiency. Our method converges 2$\times$ faster.89Error bars indicate $\pm$ 1 std over 5 random seeds.}90\label{fig:main}91\end{figure}92```9394---9596## Venue-Specific Figure Styles9798Read `target_venue` from `research-anchor.yaml` and select the matching profile. If unsure which profile to use, ask the user.99100### Profile: CNS (Nature, Science, Cell and their sub-journals)101102Nature/Science/Cell have a distinctive, recognizable figure aesthetic. Matching it signals professionalism.103104| Property | CNS Standard |105|----------|-------------|106| Font | **Helvetica / Arial** (sans-serif). Nature explicitly requires this. |107| Font size | 5–7pt for figure text (Nature allows small text because figures are high-resolution) |108| Panel labels | Bold lowercase: **a**, **b**, **c**, **d** — top-left of each panel, outside plot area |109| Color palette | Nature palette: `['#E64B35', '#4DBBD5', '#00A087', '#3C5488', '#F39B7F', '#8491B4', '#91D1C2', '#DC0000', '#7E6148', '#B09C85']` |110| Background | White. No gray background. |111| Grid lines | **None** or extremely subtle. CNS figures are clean and minimal. |112| Spines | Usually left + bottom only. No top/right spines. |113| Line width | 0.5–1pt for data lines, 0.25–0.5pt for axes |114| Multi-panel | Very common. 4–8 panels per figure. Use `plt.subplot_mosaic()` for complex layouts. |115| Figure width | Single column: 89mm. Double column: 183mm. Full page: 183mm × 247mm. |116| Annotations | Clean arrows, minimal text. Let the data speak. |117| Bar plots | Thin bars, often with individual data points overlaid (strip/swarm plot on top of bars) |118| Statistical markers | Brackets with asterisks: \*, \*\*, \*\*\*, ns |119120```python121CNS_STYLE = {122 'font.family': 'sans-serif',123 'font.sans-serif': ['Helvetica', 'Arial', 'DejaVu Sans'],124 'font.size': 7,125 'axes.titlesize': 8,126 'axes.labelsize': 7,127 'xtick.labelsize': 6,128 'ytick.labelsize': 6,129 'legend.fontsize': 6,130 'axes.linewidth': 0.5,131 'xtick.major.width': 0.5,132 'ytick.major.width': 0.5,133 'lines.linewidth': 1.0,134 'lines.markersize': 4,135 'axes.spines.top': False,136 'axes.spines.right': False,137 'axes.grid': False,138 'figure.dpi': 300,139 'savefig.dpi': 300,140 'savefig.bbox': 'tight',141}142143NATURE_COLORS = ['#E64B35', '#4DBBD5', '#00A087', '#3C5488',144 '#F39B7F', '#8491B4', '#91D1C2', '#DC0000',145 '#7E6148', '#B09C85']146```147148### Profile: CS Conferences (NeurIPS, ICML, ICLR, CVPR, AAAI, ACL, EMNLP)149150CS conferences prioritize clarity and information density over aesthetics.151152| Property | CS Conference Standard |153|----------|----------------------|154| Font | **Serif** (Times, Computer Modern) to match paper body, OR sans-serif if consistent |155| Font size | 8–10pt (larger than CNS because columns are wider) |156| Panel labels | Uppercase or "(a) (b) (c)" in caption text; less common as on-figure labels |157| Color palette | Tableau 10, ColorBrewer, or custom — must be colorblind-safe |158| Background | White |159| Grid lines | Light gray dashed — acceptable and often helpful for reading values |160| Spines | Left + bottom preferred; all four acceptable |161| Line width | 1.5–2pt for data lines (thick enough to see in projected slides too) |162| Multi-panel | 2–4 panels typical. Subfigures common. |163| Figure width | Single column: ~3.25". Double column: ~6.875" (LaTeX `\textwidth`). |164| Error bands | Shaded regions (alpha=0.2) with mean line. Very standard for learning curves. |165| Tables > figures | CS values tables highly; main results are often a table, not a figure |166167```python168CS_STYLE = {169 'font.family': 'serif',170 'font.serif': ['Times New Roman', 'DejaVu Serif', 'Computer Modern Roman'],171 'font.size': 10,172 'axes.titlesize': 11,173 'axes.labelsize': 10,174 'xtick.labelsize': 9,175 'ytick.labelsize': 9,176 'legend.fontsize': 9,177 'axes.linewidth': 0.8,178 'lines.linewidth': 1.5,179 'lines.markersize': 6,180 'axes.spines.top': False,181 'axes.spines.right': False,182 'axes.grid': True,183 'grid.alpha': 0.3,184 'grid.linestyle': '--',185 'figure.dpi': 300,186 'savefig.dpi': 300,187 'savefig.bbox': 'tight',188}189190CS_COLORS = ['#4e79a7', '#f28e2b', '#e15759', '#76b7b2',191 '#59a14f', '#edc948', '#b07aa1', '#ff9da7',192 '#9c755f', '#bab0ac'] # Tableau 10193```194195### Profile: IEEE (Transactions, Conference Proceedings)196197IEEE has strict formatting requirements documented in their author guidelines.198199| Property | IEEE Standard |200|----------|-------------|201| Font | **Times New Roman** (mandatory) |202| Font size | 8–10pt in figures |203| Column width | Single: 3.5". Double: 7.16". |204| Color | Allowed but paper may be printed B&W — MUST be readable in grayscale |205| Captions | "Fig. 1." format (not "Figure 1") |206| Line markers | Essential — distinguish lines by marker shape, not just color |207| Grid lines | Optional, light |208209```python210IEEE_STYLE = {211 'font.family': 'serif',212 'font.serif': ['Times New Roman'],213 'font.size': 9,214 'axes.titlesize': 10,215 'axes.labelsize': 9,216 'xtick.labelsize': 8,217 'ytick.labelsize': 8,218 'legend.fontsize': 8,219 'axes.linewidth': 0.6,220 'lines.linewidth': 1.2,221 'lines.markersize': 5,222 'axes.spines.top': False,223 'axes.spines.right': False,224 'axes.grid': True,225 'grid.alpha': 0.2,226 'grid.linestyle': ':',227 'figure.dpi': 300,228 'savefig.dpi': 300,229 'savefig.bbox': 'tight',230}231```232233### Profile: Bioinformatics / Life Sciences (Genome Research, Bioinformatics, PNAS, eLife)234235Life science journals generally follow CNS aesthetics with domain-specific plot types.236237| Property | Life Science Standard |238|----------|---------------------|239| Font | **Helvetica / Arial** (following Nature/CNS tradition) |240| Style | Very close to CNS profile above |241| Domain-specific plots | Volcano plots, MA plots, heatmaps with dendrograms, Kaplan-Meier survival curves, Manhattan plots, circos plots |242| Heatmap conventions | Row/column clustering dendrograms, diverging colormap (red-white-blue for expression), annotated color bars |243| Statistical notation | Brackets with \*/\*\*/\*\*\*/ns between groups, Bonferroni-corrected p-values |244| Bar plots | Individual data points overlaid (strip/swarm), NOT just bars with error bars |245246Use `CNS_STYLE` and `NATURE_COLORS` from the CNS profile.247248### Profile: Physical Sciences (APS/Physical Review, ACS, RSC)249250| Property | Physical Sciences Standard |251|----------|--------------------------|252| Font | **Computer Modern or Helvetica** depending on journal |253| Figure width | APS single column: 3.375". Double: 6.75". |254| Conventions | SI units on all axes, scientific notation for large/small numbers, insets common for zoomed regions |255| Color | Conservative — fewer colors, more line style variation |256257Use `CS_STYLE` as base, adjust font to Computer Modern.258259### How to Select a Profile260261At project start (Phase 0/1), when `target_venue` is set in `research-anchor.yaml`:2622631. Read the venue name2642. Map to profile:265 - Nature, Science, Cell, Nature *, Science *, Cell *, PNAS, eLife → **CNS profile**266 - NeurIPS, ICML, ICLR, CVPR, ECCV, AAAI, ACL, EMNLP, KDD, WWW → **CS profile**267 - IEEE *, any IEEE transaction or conference → **IEEE profile**268 - Bioinformatics, Genome Research, Nucleic Acids Research → **Life Science profile**269 - Physical Review *, ACS *, RSC *, J. Chem. Phys. → **Physical Sciences profile**2703. If venue is unclear or not listed, ask user: *"Which figure style matches your target venue? (1) CNS/Nature style (2) CS conference style (3) IEEE style (4) Other — please describe"*2714. Write the selected profile to `src/plot_style.py` and use it for ALL figures272273## Figure Type Selection Guide274275| Data type | Recommended figure | Avoid |276|-----------|-------------------|-------|277| Method A vs B vs C on multiple datasets | Grouped bar chart or table | Pie chart |278| Performance vs hyperparameter | Line plot with error bands | Scatter without connection |279| Ablation (component contribution) | Grouped bar chart or stacked bar | Line plot (components aren't ordered) |280| Training dynamics | Line plot (x: epoch, y: metric) with shaded std | Bar chart |281| Feature importance / attention | Heatmap with annotated values | 3D plots |282| Distribution comparison | Violin plot or box plot | Overlapping histograms |283| Embedding visualization | t-SNE/UMAP scatter with class colors | PCA (usually uninformative for high-dim) |284| Qualitative examples | Grid of input→output pairs | Random cherry-picked singles |285| Architecture diagram | Clean schematic (tikz, draw.io, or programmatic) | Hand-drawn or overly complex |286| Confusion matrix | Annotated heatmap with numbers in cells | Plain matrix without annotations |287288## Style Template289290At project start, create `src/plot_style.py` based on the selected venue profile. This file is imported by every plotting script.291292```python293import matplotlib.pyplot as plt294import matplotlib as mpl295296# ──────────────────────────────────────────────297# SELECT ONE profile based on target venue.298# See Venue-Specific Figure Styles section above.299# Copy the matching STYLE dict and COLORS list here.300# ──────────────────────────────────────────────301302# Example: CS conference profile (NeurIPS, ICML, etc.)303STYLE_CONFIG = CS_STYLE # Replace with CNS_STYLE, IEEE_STYLE, etc.304COLORS = CS_COLORS # Replace with NATURE_COLORS, etc.305306mpl.rcParams.update(STYLE_CONFIG)307```308309Save as `src/plot_style.py` and import in every plotting script. This ensures ALL figures have consistent, venue-appropriate style.310311### Method-Color Mapping312313At the start of the project, define a global color mapping and use it everywhere:314315```python316METHOD_COLORS = {317 'Ours': COLORS[0], # Always blue318 'Baseline A': COLORS[1], # Always orange319 'Baseline B': COLORS[2], # Always red320 'Baseline C': COLORS[3], # Always teal321 'Ablation': COLORS[4], # Always green322}323```324325Store this mapping in `src/plot_style.py` and update it as methods are added. Never assign colors ad-hoc per figure.326327## Table Standards328329| Property | Requirement |330|----------|------------|331| Format | `booktabs` style in LaTeX (`\toprule`, `\midrule`, `\bottomrule`); no vertical lines |332| Best result | **Bold** the best value in each column/metric |333| Second best | Underline the second best (if comparing ≥4 methods) |334| Uncertainty | Always report mean ± std (or CI); bare numbers without variance are unacceptable |335| Alignment | Decimal-aligned numbers; consistent decimal places per column |336| Significance | Mark statistically significant improvements (e.g., † or * with p-value in caption) |337| Our method highlight | Use light gray row shading or clear label; never bury it in the middle |338339### LaTeX Table Template340341```latex342\begin{table}[t]343\centering344\caption{Main results on [datasets]. Best in \textbf{bold}, second best \underline{underlined}.345$\dagger$: statistically significant improvement over best baseline ($p < 0.05$, paired t-test).}346\label{tab:main}347\begin{tabular}{@{}lccc@{}}348\toprule349Method & Dataset A & Dataset B & Dataset C \\350\midrule351Baseline 1 & $83.2 \pm 0.4$ & $76.1 \pm 0.8$ & $91.3 \pm 0.2$ \\352Baseline 2 & $\underline{85.1 \pm 0.3}$ & $77.4 \pm 0.6$ & $\underline{92.0 \pm 0.3}$ \\353Baseline 3 & $84.7 \pm 0.5$ & $\underline{78.2 \pm 0.5}$ & $91.8 \pm 0.4$ \\354\midrule355Ours & $\mathbf{87.3 \pm 0.2}^\dagger$ & $\mathbf{80.1 \pm 0.4}^\dagger$ & $\mathbf{93.5 \pm 0.2}^\dagger$ \\356\bottomrule357\end{tabular}358\end{table}359```360361## Per-Figure Quality Checklist362363Before including ANY figure in the paper, verify every item.364365### Figure file (the image itself):366367- [ ] **Venue profile applied** — using the correct style from `src/plot_style.py`?368- [ ] **Readable at print size** — scale to final column width; all text ≥ 7pt (CNS: ≥ 5pt)?369- [ ] **Axis labels present** — with units (e.g., "Accuracy (%)", "Time (s)")?370- [ ] **No figure title** — title belongs in LaTeX `\caption{}`, not on the figure371- [ ] **Legend present** — if multiple series; not overlapping data?372- [ ] **Panel labels** — if multi-panel: bold **a**, **b**, **c** (CNS) or **(A)**, **(B)**, **(C)** (CS/IEEE) top-left?373- [ ] **Color consistent** — same method = same color as all other figures?374- [ ] **Colorblind safe** — distinguishable without color (markers, line styles, hatching)?375- [ ] **Error bars / variance** — shown where applicable (shaded region or error bars)?376- [ ] **Vector format** — PDF/SVG for plots (not PNG/JPG)?377- [ ] **No chartjunk** — no 3D effects, no excessive decoration, no rainbow gradients?378- [ ] **White space optimized** — tight layout, no giant margins?379380### LaTeX side (in the `.tex` file):381382- [ ] **`\caption{}` self-contained** — reader understands figure from caption alone, without reading body text?383- [ ] **`\caption{}` describes each panel** — for multi-panel: "(**a**) ... (**b**) ..."?384- [ ] **`\caption{}` states key takeaway** — not just "Results on Dataset X" but what the results show?385- [ ] **`\caption{}` notes statistical details** — "Error bars: ± 1 std over 5 seeds" or similar?386- [ ] **`\label{fig:xxx}`** present and descriptive?387- [ ] **`\includegraphics` width** — matches venue column width (`\columnwidth` or `\textwidth`)?388- [ ] **Referenced in text** — every figure is `\ref{}`'d in the body text; no orphaned figures?389390## Anti-Patterns — NEVER Do These391392| Anti-pattern | Why it's bad | What to do instead |393|-------------|-------------|-------------------|394| Default matplotlib style (white bg, thin lines, small fonts) | Unreadable at print size | Apply the style template above |395| Rainbow colormap for categorical data | Perceptually nonlinear, colorblind-hostile | Use qualitative palette (Tableau 10, ColorBrewer) |396| 3D bar charts or pie charts | Distort proportions, waste ink | 2D grouped bar chart |397| Inconsistent colors across figures | Reader can't track methods | Global method-color mapping |398| Screenshots of terminal output | Unreadable, unprofessional | Proper table or formatted code block |399| Figures without error bars | Results look unreliable | Always show variance (std, CI, min-max) |400| Tiny axis labels that need zooming | Will be illegible in print | ≥ 8pt at final size |401| Cherry-picked qualitative examples | Misleading | Show representative range (good + average + failure) |402403## Integration with Workflow404405This skill should be invoked:4064071. **Phase 4 (experiment-execution)**: When generating any experimental figure — apply style template, use method-color mapping4082. **Phase 5 (results-integration)**: When producing the content outline — verify all planned figures meet standards; run the per-figure checklist4093. **Phase 6 (paper-writing)**: Before including each figure in a `.tex` file — final quality check; verify LaTeX `\includegraphics` path and caption410411## Rationalization Prevention412413| Excuse | Reality |414|--------|---------|415| "I'll fix the figures later" | You won't. Style issues compound. Apply the template from the first plot. |416| "Default matplotlib looks fine" | On screen at 100%, maybe. At conference poster or PDF zoom, it's unreadable. |417| "Color doesn't matter" | 8% of men are colorblind. Reviewers print in B&W. Color always matters. |418| "Error bars clutter the plot" | Error bars ARE the data. Without them, your plot is a lie. |419| "One quick plot is fine for now" | Quick plots become final figures 90% of the time. Do it right the first time. |
Run npx skillmds@latest add evoclaw/figure-quality-standards in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use whenever generating figures or tables for a research paper — enforces publication-quality visual standards including style consistency, readability, accessibility, and venue-appropriate formatting It is listed under Web & Frontend on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
EvoClaw (@evoclaw) published this skill. Their other Agent Skills are listed on their SkillMD profile.