Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Science (AAAS) figure preparation: resolution (150-300+ DPI), formats (PDF/EPS/TIFF), RGB color, Myriad/Helvetica fonts, strict image manipulation policies including gamma adjustment disclosure.
.claude/skills/jaechang-hits-science-figure-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 132% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 185% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 89% | 0% |
This guide provides the complete specifications for preparing figures for submission to Science journal (published by AAAS). Science has different requirements for initial vs. revised manuscript submissions and requires explicit disclosure of nonlinear image adjustments.
Official reference: https://www.science.org/content/page/instructions-preparing-initial-manuscript
| Image Type | Resolution | |---|---| | All figures | 150-300 DPI |
| Image Type | Minimum Resolution | Notes | |---|---|---| | Line art | 300 DPI+ | At final print size | | Grayscale and color artwork | 300 DPI+ | Higher resolution preferred |
CRITICAL: Upsampling (artificially increasing resolution) is prohibited. The resolution must be native to the image.
pythonfrom PIL import Image def check_science_resolution(image_path, stage='initial'): """Check image resolution for Science submission. Args: image_path: Path to image file stage: 'initial' (150-300 DPI) or 'revised' (300+ DPI) """ img = Image.open(image_path) dpi = img.info.get('dpi', (72, 72)) min_dpi = 150 if stage == 'initial' else 300 print(f"Stage: {stage} submission") print(f"DPI: {dpi[0]} x {dpi[1]}") print(f"Minimum required: {min_dpi} DPI") if dpi[0] >= min_dpi: print("PASS: Resolution meets Science requirements") else: print(f"FAIL: Need at least {min_dpi} DPI") return dpi[0] >= min_dpi
| Figure Type | Preferred Formats | |---|---| | Vector illustrations/diagrams | PDF, EPS, Adobe Illustrator (AI) | | Raster illustrations/diagrams | TIFF (300+ DPI) | | Photography/microscopy | TIFF, JPEG, PNG, PSD, EPS, PDF |
.docx or PDF manuscript files| Layout | Width | |---|---| | 1 column | 3.4 inches (86 mm / 20.38 picas) | | 1.5 columns | 5.0 inches | | 2 columns | 7.0-7.3 inches | | Maximum | 6.5 x 8 inches (16.5 x 20 cm) |
Figures should be sized to fit 8.5" x 11" or A4 paper.
pythonimport matplotlib.pyplot as plt SCIENCE_WIDTHS = { 'single': 3.4, # inches 'middle': 5.0, 'double': 7.3, } def create_science_figure(layout='single', aspect_ratio=0.75): """Create a Matplotlib figure sized for Science journal.""" width = SCIENCE_WIDTHS[layout] height = min(width * aspect_ratio, 8.0) # max height 8 inches fig, ax = plt.subplots(figsize=(width, height)) fig.set_dpi(300) return fig, ax
| Element | Font | Size | Style | |---|---|---|---| | Preferred font | Myriad | — | Sans-serif | | Alternative fonts | Helvetica, Arial | — | Sans-serif | | Panel labels | — | 8 pt | Bold | | Other figure text | — | 5-7 pt | Max 7 pt, min 5 pt |
pythonimport matplotlib.pyplot as plt def set_science_fonts(): """Configure Matplotlib for Science journal figure fonts.""" plt.rcParams.update({ 'font.family': 'sans-serif', 'font.sans-serif': ['Myriad Pro', 'Helvetica', 'Arial'], 'font.size': 7, 'axes.labelsize': 7, 'axes.titlesize': 7, 'xtick.labelsize': 6, 'ytick.labelsize': 6, 'legend.fontsize': 5, })
pythondef format_science_axis(ax, xlabel, ylabel, x_unit='', y_unit=''): """Format axes following Science journal conventions.""" if x_unit: ax.set_xlabel(f"{xlabel} ({x_unit})", fontsize=7) else: ax.set_xlabel(xlabel, fontsize=7) if y_unit: ax.set_ylabel(f"{ylabel} ({y_unit})", fontsize=7) else: ax.set_ylabel(ylabel, fontsize=7) ax.tick_params(labelsize=6)
pythonfrom PIL import Image import os def validate_science_figure(image_path, stage='initial'): """Full validation of a figure against Science requirements.""" img = Image.open(image_path) issues = [] # 1. Resolution check dpi = img.info.get('dpi', (72, 72)) min_dpi = 150 if stage == 'initial' else 300 if dpi[0] < min_dpi: issues.append(f"Resolution {dpi[0]} DPI below minimum {min_dpi} DPI for {stage} submission") # 2. Color mode check if img.mode not in ('RGB', 'RGBA'): issues.append(f"Color mode is {img.mode}; RGB recommended") # 3. Dimension check if dpi[0] > 0: width_in = img.size[0] / dpi[0] height_in = img.size[1] / dpi[1] if width_in > 7.3: issues.append(f"Width {width_in:.1f}\" exceeds maximum 7.3\"") if height_in > 8.0: issues.append(f"Height {height_in:.1f}\" exceeds maximum 8.0\"") # Report print(f"=== Science Figure Validation ({stage}) ===") 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}") if issues: print(f"\nISSUES FOUND ({len(issues)}):") for issue in issues: print(f" - {issue}") else: print("\nAll checks PASSED") return len(issues) == 0
Science uses different figure requirements for initial vs. revised manuscripts. Initial submissions accept 150-300 DPI figures embedded in the manuscript. Revised manuscripts require separate high-resolution files (300+ DPI) in publication-ready formats. This two-stage approach reduces upfront preparation burden while ensuring final quality.
Science uniquely requires explicit disclosure of nonlinear image adjustments (e.g., gamma corrections) in the figure caption. Linear adjustments (brightness, contrast) applied uniformly need no special disclosure. This distinction is critical — failure to disclose gamma changes can be flagged as data manipulation.
Science enforces strict maximum dimensions: 6.5 x 8 inches (16.5 x 20 cm). Single-column figures are 3.4 inches wide; double-column figures are 7.0-7.3 inches. All figures must fit on standard letter (8.5 x 11 inch) or A4 paper.
What submission stage are you at?
├── Initial submission
│ ├── Embed figures in manuscript (.docx or PDF)
│ └── 150-300 DPI acceptable
└── Revised manuscript
├── Upload separate high-resolution files
├── Vector figures (graphs, diagrams)
│ └── PDF, EPS, or AI format
└── Raster figures (photos, micrographs)
└── TIFF at 300+ DPI| Scenario | Format | Resolution | Notes | |---|---|---|---| | Initial submission graph | Embedded in .docx | 150-300 DPI | Low bar for initial review | | Revised manuscript graph | PDF or EPS | Vector | Separate upload required | | Photograph (revised) | TIFF | 300+ DPI | Native resolution only | | Micrograph with gamma adjustment | TIFF | 300+ DPI | Disclose gamma in caption | | Diagram or schematic | AI or EPS | Vector | Embed all fonts |
Before submitting figures to Science, verify:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-13 | pass→pass | 7,933 | 4,682 | -41% | 1 | 1 | 0% | 1,335 | 4,030 | +202% | 0 | 0 | — |
case-04 | pass→pass | 12,456 | 8,990 | -28% | 1 | 1 | 0% | 2,131 | 4,915 | +131% | 0 | 0 | — |
case-05 | fail→pass | 11,012 | 6,848 | -38% | 1 | 1 | 0% | 1,947 | 4,508 | +132% | 0 | 0 | — |
case-06 | pass→pass | 9,656 | 6,315 | -35% | 1 | 1 | 0% | 1,590 | 4,173 | +162% | 0 | 0 | — |
case-01 | fail→pass | 21,857 | 17,958 | -18% | 1 | 1 | 0% | 4,437 | 6,150 | +39% | 0 | 0 | — |
case-02 | fail→pass | 19,495 | 18,894 | -3% | 1 | 1 | 0% | 4,524 | 7,143 | +58% | 0 | 0 | — |
case-03 | fail→pass | 10,441 | 11,043 | +6% | 1 | 1 | 0% | 1,804 | 5,147 | +185% | 0 | 0 | — |
case-12 | pass→pass | 12,187 | 6,904 | -43% | 1 | 1 | 0% | 2,134 | 4,477 | +110% | 0 | 0 | — |
case-07 | pass→pass | 9,695 | 6,785 | -30% | 1 | 1 | 0% | 1,532 | 4,340 | +183% | 0 | 0 | — |
case-08 | fail→pass | 12,038 | 6,680 | -45% | 1 | 1 | 0% | 2,413 | 4,570 | +89% | 0 | 0 | — |
case-09 | pass→pass | 6,694 | 2,279 | -66% | 1 | 1 | 0% | 1,101 | 3,614 | +228% | 0 | 0 | — |
case-10 | pass→pass | 14,489 | 7,708 | -47% | 1 | 1 | 0% | 2,440 | 4,582 | +88% | 0 | 0 | — |
case-11 | pass→pass | 9,851 | 9,298 | -6% | 1 | 1 | 0% | 1,694 | 4,852 | +186% | 0 | 0 | — |
case-14 | pass→pass | 9,883 | 5,933 | -40% | 1 | 1 | 0% | 1,602 | 4,290 | +168% | 0 | 0 | — |
case-15 | pass→pass | 9,306 | 6,407 | -31% | 1 | 1 | 0% | 1,492 | 4,290 | +188% | 0 | 0 | — |
case-16 | pass→pass | 12,266 | 10,165 | -17% | 1 | 1 | 0% | 2,024 | 5,108 | +152% | 0 | 0 | — |
case-17 | fail→pass | 8,378 | 6,371 | -24% | 1 | 1 | 0% | 1,515 | 4,487 | +196% | 0 | 0 | — |
case-18 | pass→pass | 14,887 | 8,448 | -43% | 1 | 1 | 0% | 2,338 | 4,857 | +108% | 0 | 0 | — |
case-19 | pass→pass | 7,754 | 7,439 | -4% | 1 | 1 | 0% | 1,850 | 4,911 | +165% | 0 | 0 | — |
case-20 | fail→fail | 11,324 | 8,946 | -21% | 1 | 1 | 0% | 2,009 | 4,997 | +149% | 0 | 0 | — |
case-21 | fail→fail | 15,132 | 22,173 | +47% | 1 | 1 | 0% | 2,819 | 7,750 | +175% | 0 | 0 | — |
case-22 | fail→fail | 12,861 | 8,109 | -37% | 1 | 1 | 0% | 2,263 | 4,713 | +108% | 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 +27 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.