Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Nature figure preparation: resolution (300+ DPI), formats (AI/EPS/TIFF), RGB color, Helvetica/Arial fonts, lowercase panel labels, image integrity requirements.
.claude/skills/jaechang-hits-nature-figure-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 232% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 191% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 128% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 123% | 0% |
This guide provides the complete specifications for preparing figures for submission to Nature and Nature Research journals. Following these guidelines ensures smooth processing and high-quality reproduction of your figures in both print and online formats.
Official reference: https://www.nature.com/nature/for-authors/formatting-guide
| Image Type | Minimum Resolution | Notes | |---|---|---| | All figures | 300 DPI | At maximum print size | | Optimal quality | 450 DPI+ | Recommended for best online display | | Online submission | 300 PPI max | To keep file sizes manageable |
CRITICAL: Do NOT artificially increase resolution (upsampling) in image editing software. This does not improve quality and may introduce artifacts.
pythonfrom PIL import Image def check_nature_resolution(image_path): """Check if image meets Nature's resolution requirements.""" img = Image.open(image_path) width_px, height_px = img.size dpi = img.info.get('dpi', (72, 72)) print(f"Image: {image_path}") print(f"Dimensions: {width_px} x {height_px} px") print(f"DPI: {dpi[0]} x {dpi[1]}") if dpi[0] < 300 or dpi[1] < 300: print("WARNING: Resolution below 300 DPI minimum") print(f" Need at least 300 DPI for Nature submission") elif dpi[0] >= 450: print("PASS: Meets optimal resolution (450+ DPI)") else: print("PASS: Meets minimum resolution (300+ DPI)") # Check file size import os size_mb = os.path.getsize(image_path) / (1024 * 1024) print(f"File size: {size_mb:.1f} MB") if size_mb > 10: print("WARNING: File exceeds 10 MB limit") return dpi[0] >= 300 and dpi[1] >= 300
| Figure Type | Preferred Format | Alternative | |---|---|---| | Line drawings, graphs, schematics | Adobe Illustrator (AI), EPS, PDF | Vector formats preserve editability | | Photographs, micrographs | Photoshop (PSD), TIFF | High-quality raster | | General purpose | JPEG (300-600 DPI) | Acceptable for most figures | | Extended Data figures | JPEG (preferred), TIFF, EPS | |
Nature does not specify fixed column widths for initial submission, but figures should be:
pythonimport matplotlib.pyplot as plt def create_nature_figure(n_panels=1, fig_type='single_column'): """Create a Matplotlib figure sized for Nature.""" if fig_type == 'single_column': fig_width = 3.5 # inches (approx 89 mm) elif fig_type == 'double_column': fig_width = 7.0 # inches (approx 178 mm) else: fig_width = 5.0 # 1.5 column fig_height = fig_width * 0.75 # default aspect ratio fig, axes = plt.subplots(1, n_panels, figsize=(fig_width, fig_height)) fig.set_dpi(450) return fig, axes
python# Nature-friendly colorblind-safe colors NATURE_COLORS = { 'blue': '#0072B2', 'orange': '#E69F00', 'green': '#009E73', 'red': '#D55E00', 'purple': '#CC79A7', 'cyan': '#56B4E9', 'yellow': '#F0E442', 'black': '#000000', }
| Element | Font | Size | Style | |---|---|---|---| | Body text in figures | Helvetica or Arial | 5-7 pt | Regular | | Panel labels | Helvetica or Arial | 8 pt | Bold, lowercase (a, b, c) | | Amino acid sequences | Courier | — | Monospace | | Greek characters | Symbol | — | — |
pythonimport matplotlib.pyplot as plt def set_nature_fonts(): """Configure Matplotlib for Nature figure fonts.""" plt.rcParams.update({ 'font.family': 'sans-serif', 'font.sans-serif': ['Helvetica', 'Arial'], 'font.size': 7, 'axes.labelsize': 7, 'axes.titlesize': 7, 'xtick.labelsize': 6, 'ytick.labelsize': 6, 'legend.fontsize': 6, 'figure.titlesize': 8, })
pythonimport matplotlib.pyplot as plt import string def add_nature_panel_labels(fig, axes): """Add Nature-style lowercase bold panel labels.""" if not hasattr(axes, '__iter__'): axes = [axes] for i, ax in enumerate(axes): label = string.ascii_lowercase[i] ax.text(-0.1, 1.1, label, transform=ax.transAxes, fontsize=8, fontweight='bold', va='top', ha='right', fontfamily='Arial')
pythonfrom PIL import Image import os def validate_nature_figure(image_path): """Full validation of a figure against Nature requirements.""" img = Image.open(image_path) issues = [] # 1. Resolution check dpi = img.info.get('dpi', (72, 72)) if dpi[0] < 300 or dpi[1] < 300: issues.append(f"Resolution too low: {dpi[0]}x{dpi[1]} DPI (need 300+)") # 2. Color mode check if img.mode == 'CMYK': issues.append("Color mode is CMYK; RGB is recommended for Nature") elif img.mode not in ('RGB', 'RGBA'): issues.append(f"Unexpected color mode: {img.mode}; use RGB") # 3. File size check size_mb = os.path.getsize(image_path) / (1024 * 1024) if size_mb > 10: issues.append(f"File size {size_mb:.1f} MB exceeds 10 MB limit") # 4. Format check fmt = img.format accepted = ['TIFF', 'JPEG', 'PNG', 'EPS', 'PDF'] if fmt and fmt.upper() not in accepted: issues.append(f"Format '{fmt}' may not be accepted; prefer TIFF or JPEG") # Report print(f"=== Nature Figure Validation: {os.path.basename(image_path)} ===") print(f"Dimensions: {img.size[0]} x {img.size[1]} px") print(f"DPI: {dpi[0]} x {dpi[1]}") print(f"Color mode: {img.mode}") print(f"Format: {fmt}") print(f"File size: {size_mb:.1f} MB") if issues: print(f"\nISSUES FOUND ({len(issues)}):") for issue in issues: print(f" - {issue}") else: print("\nAll checks PASSED") return len(issues) == 0
DPI (dots per inch) measures print resolution. Nature requires 300+ DPI at maximum print size. Upsampling (artificially increasing resolution in software) does not improve image quality and introduces interpolation artifacts. Always capture or export images at native high resolution.
Vector formats (AI, EPS, PDF) store images as mathematical paths and scale without quality loss — ideal for graphs, schematics, and line art. Raster formats (TIFF, JPEG, PSD) store pixel grids and degrade when enlarged — appropriate for photographs and micrographs. Nature prefers vector for line drawings and raster for photographic content.
Nature enforces strict image integrity policies aligned with the Committee on Publication Ethics (COPE) guidelines. All adjustments must be applied uniformly to the entire image. Selective enhancement of specific regions (e.g., adjusting brightness on one gel lane) is considered data manipulation and grounds for rejection or retraction.
What type of figure are you preparing?
├── Graph, schematic, or diagram → Vector format (AI, EPS, PDF)
│ ├── Created in Illustrator → Export as AI or EPS
│ └── Created in Python/R → Export as PDF or EPS
├── Photograph or micrograph → Raster format (TIFF, PSD, JPEG)
│ ├── Need highest quality → TIFF at 450+ DPI
│ └── File size constrained → JPEG at 300+ DPI
└── Multi-panel composite → Single assembled file
├── Mixed vector + raster → Assemble in Illustrator, export as AI/PDF
└── All raster panels → Assemble in Photoshop, export as TIFF| Scenario | Recommended Format | Resolution | Notes | |---|---|---|---| | Bar chart or line graph | AI, EPS, PDF | Vector (resolution-independent) | Keep text editable | | Fluorescence micrograph | TIFF | 450+ DPI | RGB mode, colorblind-safe palette | | Western blot image | TIFF | 300+ DPI | No selective adjustments | | Flow chart or pathway | AI, EPS | Vector | Use Helvetica/Arial fonts | | Extended Data figure | JPEG | 300+ DPI | Same standards as main figures |
Before submitting figures to Nature, verify:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,793 | 36,210 | +116% | 1 | 1 | 0% | 3,427 | 6,538 | +91% | 0 | 0 | — |
case-02 | fail→fail | 19,654 | 12,311 | -37% | 1 | 1 | 0% | 3,103 | 5,990 | +93% | 0 | 0 | — |
case-03 | pass→pass | 13,469 | 9,983 | -26% | 1 | 1 | 0% | 2,564 | 5,706 | +123% | 0 | 0 | — |
case-04 | pass→pass | 10,188 | 6,051 | -41% | 1 | 1 | 0% | 1,689 | 4,857 | +188% | 0 | 0 | — |
case-05 | pass→pass | 9,596 | 7,906 | -18% | 1 | 1 | 0% | 1,574 | 5,110 | +225% | 0 | 0 | — |
case-06 | fail→pass | 8,721 | 5,411 | -38% | 1 | 1 | 0% | 1,422 | 4,726 | +232% | 0 | 0 | — |
case-07 | pass→pass | 12,762 | 8,960 | -30% | 1 | 1 | 0% | 2,005 | 5,318 | +165% | 0 | 0 | — |
case-08 | pass→pass | 11,986 | 4,516 | -62% | 1 | 1 | 0% | 1,722 | 4,554 | +164% | 0 | 0 | — |
case-09 | pass→pass | 10,293 | 8,973 | -13% | 1 | 1 | 0% | 1,624 | 4,913 | +203% | 0 | 0 | — |
case-10 | fail→fail | 11,432 | 7,496 | -34% | 1 | 1 | 0% | 2,354 | 5,285 | +125% | 0 | 0 | — |
case-11 | pass→pass | 8,891 | 8,591 | -3% | 1 | 1 | 0% | 1,571 | 5,433 | +246% | 0 | 0 | — |
case-12 | pass→pass | 11,843 | 7,421 | -37% | 1 | 1 | 0% | 2,069 | 5,197 | +151% | 0 | 0 | — |
case-13 | pass→pass | 6,807 | 8,510 | +25% | 1 | 1 | 0% | 1,228 | 4,334 | +253% | 0 | 0 | — |
case-14 | pass→pass | 13,536 | 6,810 | -50% | 1 | 1 | 0% | 2,274 | 5,035 | +121% | 0 | 0 | — |
case-15 | pass→pass | 12,941 | 2,861 | -78% | 1 | 1 | 0% | 1,067 | 4,259 | +299% | 0 | 0 | — |
case-16 | pass→pass | 13,007 | 6,278 | -52% | 1 | 1 | 0% | 2,260 | 5,003 | +121% | 0 | 0 | — |
case-17 | fail→pass | 10,692 | 6,437 | -40% | 1 | 1 | 0% | 1,664 | 4,850 | +191% | 0 | 0 | — |
case-18 | fail→pass | 14,068 | 12,567 | -11% | 1 | 1 | 0% | 2,744 | 6,252 | +128% | 0 | 0 | — |
case-19 | pass→pass | 12,315 | 16,410 | +33% | 1 | 1 | 0% | 2,354 | 6,918 | +194% | 0 | 0 | — |
case-20 | pass→pass | 9,086 | 8,493 | -7% | 1 | 1 | 0% | 1,621 | 5,338 | +229% | 0 | 0 | — |
case-21 | pass→pass | 10,523 | 8,947 | -15% | 1 | 1 | 0% | 1,966 | 5,516 | +181% | 0 | 0 | — |
case-22 | pass→pass | 13,828 | 12,641 | -9% | 1 | 1 | 0% | 2,695 | 6,298 | +134% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.