Skip to content
Development
Skill

/science-figure-guide

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.

From plugin
sciagent-skills
364200 skills
Install
$ npx -y skills add jaechang-hits/SciAgent-Skills --skill science-figure-guide --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/science-figure-guide

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

science-figure-guide.SKILL.md
name: science-figure-guide
description: "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."
license: CC-BY-4.0
compatibility: Python 3.10+, Pillow, Matplotlib
metadata:
  authors: HITS
  version: "1.0"

Science (AAAS) Figure Preparation Guide

Overview

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

---

Resolution Requirements

Initial Submission

| Image Type | Resolution | |---|---| | All figures | **150-300 DPI** |

Revised Manuscript (Higher Standards)

| 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.

from 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

---

File Format

Revised Manuscript Formats (in order of preference)

| 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 |

Initial Submission

  • Figures can be embedded directly in `.docx` or PDF manuscript files

---

Figure Size and Dimensions

| 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.

import 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

---

Color Mode

  • **RGB** is the standard practice
  • Journal handles CMYK conversion for print
  • No explicit color mode mandate, but RGB is recommended

---

Font Requirements

| 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 |

Critical Rules

  • **All fonts must be embedded**
  • Use sans-serif fonts whenever possible
  • Simple solid or open symbols reduce well at small sizes
import 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,
    })

---

Labeling Conventions

Figure Numbering

  • Cite figures in numerical order in the text

Titles and Captions

  • Figure titles go at the **beginning of the caption**, NOT inside the figure
  • No single caption should exceed approximately **200 words**

Axes

  • Label ordinate and abscissa with: **parameter/variable**, **units**, and **scale**
  • Use sans-serif fonts for all labels
def 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)

---

Image Integrity and Manipulation Policy

PERMITTED

  • **Linear adjustments**: Brightness, contrast, color — applied **uniformly to the entire image**

REQUIRES DISCLOSURE

  • **Nonlinear adjustments** (e.g., gamma corrections) must be **specified in the figure caption**

PROHIBITED

  • **Selective enhancement**: Altering one part of an image while leaving other parts unchanged
  • Adjustments that cause changes in data interpretation
  • Manipulations applied to local areas only

Best Practices

  • Perform all manipulations only on **copies** of unprocessed image data
  • Adjustments must be moderate and not misrepresent the data
  • All changes must be applied to the **whole image**

---

Python Quick Start: Full Validation

from 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
Read more
Ships withsciagent-skills

Turn your AI coding agent into a life sciences expert — 199 bioinformatics skills for Claude Code covering RNA-seq, single-cell analysis, genomics, proteomics, drug discovery, and more. Boosted BixBench from 65% to 92%. Open source.

Get the whole plugin

Other skills on sciagent-skills.