IEEE Publication Figures
Use this skill to generate or repair figures that will survive IEEE production: vector, correctly sized for the column, with embedded fonts and readable text at print size.
Core stance
- Size to the column from the start. Single-column ≈ 3.5 in (88.9 mm) wide; double-column ≈ 7.16 in (181.6 mm). Design at final size so fonts end up readable — never shrink a big figure.
- Vector first. Output PDF or EPS for line/vector art; embed fonts. Use high-res raster only for photographic content (≥ 300 dpi color/grayscale, ≥ 600 dpi for line art / combinations).
- Readable and grayscale-safe. Minimum ~8 pt text at final size; distinguish series by marker/linestyle/hatch as well as colour so the figure survives B/W printing; use a colorblind-safe palette.
- Comms axis conventions. Error/outage curves use a log y-axis (
semilogy); keep the SNR range wide enough to show the high-SNR slope (diversity order); define the SNR axis (transmit vs receive). Plot a derived expression as a line and its Monte-Carlo check as markers. - One panel, one question. No two panels answer the same thing. The figure must be legible and self-explanatory with its caption.
- No fabricated data. Plot only the user's real numbers; if data is missing, ask or stub with a clearly labelled placeholder.
When to open extra files
| File | Open when |
|---|---|
| references/ieee-figure-spec.md | Sizing, resolution, fonts, colour/grayscale, file format, multi-panel layout, caption rules, submission checklist |
| references/matplotlib-patterns.md | Concrete matplotlib setup (rcParams for embedded fonts, sizing, palettes) and ready patterns for BER/outage-vs-SNR (semilog), rate vs SNR/antennas, analysis-vs-simulation overlay, convergence, CDF, NMSE-vs-SNR, training/validation loss, and ISAC plots (rate–CRB tradeoff, beampattern, ROC) |
Workflow
- Target column: ask single- or double-column; set the width accordingly.
- Pick the chart type that matches the result (see matplotlib-patterns.md): BER/outage vs SNR (semilog y) for reliability, line vs SNR/antennas for rate/efficiency, analysis-line + simulation-marker overlay to validate a derivation, objective-vs-iteration for convergence, CDF for distributions.
- Set the rendering rcParams first (embedded fonts, sans-serif, sizes) — before any plotting.
- Plot the real data; encode each scheme redundantly (colour + marker/linestyle). Use
semilogyfor error/outage; floor the y-axis at the lowest reliably simulated value. - Label fully: axis titles with units (dB, bps/Hz), defined SNR axis, legend; text ≥ 8 pt.
- Export
.pdf(or.eps) as primary and a 300–600 dpi.pngpreview. - Grayscale check: convert to gray and confirm series are still distinguishable.
- Return the script, the output paths, and a one-line caption draft.
Output format
Script:a self-contained, runnable plotting script (matplotlib) using the user's data.Outputs:the vector file path + a PNG preview path.Caption:a one-sentence draft stating what the figure shows (the question it answers).Checks:confirmation of size, font embedding, and grayscale legibility.