---
name: cell-figure-guide
description: "Figure and image preparation guide for Cell (Cell Press) journal. Covers resolution (300-1000 DPI by type), file formats (TIFF, PDF), RGB color mode, Avenir/Arial fonts, uppercase panel labels, and strict image manipulation policies."
license: CC-BY-4.0
compatibility: Python 3.10+, Pillow, Matplotlib
metadata:
  authors: HITS
  version: "1.0"
---

# Cell Figure Preparation Guide

## Overview

This guide provides the complete specifications for preparing figures for submission to **Cell** and other Cell Press journals (e.g., Cell Stem Cell, Cell Reports, Molecular Cell). Cell Press has strict figure requirements and a rigorous image integrity policy.

**Official reference**: https://www.cell.com/information-for-authors/figure-guidelines

---

## Resolution Requirements

| Image Type | Minimum Resolution | Notes |
|---|---|---|
| Color / Grayscale photographs | **300 DPI** | At desired print size |
| Black-and-white images | **500 DPI** | At desired print size |
| Line art (graphs, diagrams) | **1,000 DPI** | At desired print size |

**IMPORTANT**: All resolution measurements are at the **desired print size**, not at full-page size.

### Verify Resolution

```python
from PIL import Image

def check_cell_resolution(image_path, image_type='color'):
    """Check if image meets Cell journal resolution requirements.

    Args:
        image_path: Path to the image file
        image_type: 'color' (300 DPI), 'bw' (500 DPI), or 'lineart' (1000 DPI)
    """
    min_dpi = {'color': 300, 'bw': 500, 'lineart': 1000}
    required = min_dpi.get(image_type, 300)

    img = Image.open(image_path)
    dpi = img.info.get('dpi', (72, 72))

    print(f"Image type: {image_type}")
    print(f"Required DPI: {required}")
    print(f"Actual DPI: {dpi[0]} x {dpi[1]}")

    if dpi[0] >= required:
        print("PASS: Resolution meets Cell requirements")
    else:
        print(f"FAIL: Need at least {required} DPI, got {dpi[0]}")

    return dpi[0] >= required
```

---

## File Format

### Preferred Formats

| Format | Best For | Notes |
|---|---|---|
| **TIFF** | Bitmap, grayscale, color images | Use LZW compression to reduce size |
| **PDF** | Any figure type | Universally accepted |
| **EPS** | Vector images (graphs, diagrams) | Preserves scalability |

### Also Accepted
- JPEG, CDX files

### File Size
- Individual files: **20 MB maximum**

### Submission Notes
- Initial submission: Figures can be embedded in manuscript or uploaded separately
- Final production: Separate high-resolution files required

---

## Figure Size and Dimensions

### 2-Column Format Journals (Cell, Molecular Cell, etc.)

| Layout | Width |
|---|---|
| 1 column | **85 mm** (3.35 in) |
| 1.5 columns | **114 mm** (4.49 in) |
| Full width | **174 mm** (6.85 in) |

### 3-Column Format Journals

| Layout | Width |
|---|---|
| 1 column | **55 mm** (2.17 in) |
| 2 columns | **114 mm** (4.49 in) |
| Full width | **174 mm** (6.85 in) |

### Other Cell Press Journals (Chem, Joule, Matter, etc.)

| Layout | Width |
|---|---|
| 1 column | **112 mm** (4.41 in) |
| Full width | **172 mm** (6.77 in) |

**All figures** must fit on a single 8.5" x 11" page.

### Python: Set Cell Figure Dimensions

```python
import matplotlib.pyplot as plt

# Cell Press figure widths in inches
CELL_WIDTHS = {
    '2col_single':   85 / 25.4,   # 3.35 in
    '2col_1.5':      114 / 25.4,  # 4.49 in
    '2col_full':     174 / 25.4,  # 6.85 in
    '3col_single':   55 / 25.4,   # 2.17 in
    '3col_double':   114 / 25.4,  # 4.49 in
    '3col_full':     174 / 25.4,  # 6.85 in
}

def create_cell_figure(layout='2col_single', aspect_ratio=0.75):
    """Create a Matplotlib figure sized for Cell Press journals."""
    width = CELL_WIDTHS[layout]
    height = width * aspect_ratio

    fig, ax = plt.subplots(figsize=(width, height))
    fig.set_dpi(300)

    return fig, ax
```

---

## Color Mode

- **Submit in RGB** color space
- Journal converts to CMYK for print production
- RGB preserves brighter colors for online viewing

```python
from PIL import Image

def convert_to_rgb_for_cell(image_path, output_path):
    """Convert image to RGB for Cell Press submission."""
    img = Image.open(image_path)
    if img.mode == 'CMYK':
        img = img.convert('RGB')
        print("Converted from CMYK to RGB")
    elif img.mode != 'RGB':
        img = img.convert('RGB')
        print(f"Converted from {img.mode} to RGB")
    img.save(output_path)
    return output_path
```

---

## Font Requirements

| Element | Font | Size |
|---|---|---|
| Primary font | **Avenir** (preferred), Arial, Helvetica | — |
| Figure text | — | ~**7 pt** at print size |
| Panel labels | — | Bold, **capital letters** |

### Critical Rules
- **All fonts must be embedded** in Adobe Illustrator files
- Use Avenir as the first choice; Arial or Helvetica as alternatives
- Consistent font usage across all figure panels

```python
import matplotlib.pyplot as plt

def set_cell_fonts():
    """Configure Matplotlib for Cell Press figure fonts."""
    plt.rcParams.update({
        'font.family': 'sans-serif',
        'font.sans-serif': ['Avenir', 'Arial', 'Helvetica'],
        'font.size': 7,
        'axes.labelsize': 7,
        'axes.titlesize': 7,
        'xtick.labelsize': 6,
        'ytick.labelsize': 6,
        'legend.fontsize': 6,
    })
```

---

## Labeling Conventions

### Panel Labels
- **Capital letters**: A, B, C, D, ...
- Bold weight
- Position: top-left corner of each panel

### Titles
- **Do NOT place titles inside figures** — include them in the figure caption instead
- Remove any labels not essential for understanding the figure; explain in caption

```python
import matplotlib.pyplot as plt
import string

def add_cell_panel_labels(fig, axes):
    """Add Cell-style uppercase bold panel labels."""
    if not hasattr(axes, '__iter__'):
        axes = [axes]

    for i, ax in enumerate(axes):
        label = string.ascii_uppercase[i]
        ax.text(-0.1, 1.1, label,
                transform=ax.transAxes,
                fontsize=8,
                fontweight='bold',
                va='top',
                ha='right',
                fontfamily='Arial')
```

---

## Image Integrity and Manipulation Policy

### STRICTLY PROHIBITED
- **Photoshop clone/heal tool usage** on scientific images
- Selective enhancement or alteration of any part of an image
- Splicing images from different experiments without clear indication
- Touching up gel/blot images to hide or alter data

### PERMITTED (with full disclosure)
- Brightness, contrast, and color adjustments applied **uniformly to the entire image**
- Minimal image processing for microscopy (must be described in Methods)

### REQUIRED
- Single color channel alterations must be explained in **both legend and Methods**
- Gel images: removed lanes must be **clearly marked** and alterations noted in legend
- **Original unprocessed data** must be available upon editor/reviewer request
- All processing steps must be transparently described

---

## Python Quick Start: Full Validation

```python
from PIL import Image
import os

def validate_cell_figure(image_path, image_type='color', layout='2col_single'):
    """Full validation of a figure against Cell Press requirements."""
    img = Image.open(image_path)
    issues = []

    # 1. Resolution check
    min_dpi = {'color': 300, 'bw': 500, 'lineart': 1000}
    required_dpi = min_dpi.get(image_type, 300)
    dpi = img.info.get('dpi', (72, 72))
    if dpi[0] < required_dpi:
        issues.append(f"Resolution {dpi[0]} DPI below minimum {required_dpi} DPI for {image_type}")

    # 2. Color mode check
    if img.mode != 'RGB':
        issues.append(f"Color mode is {img.mode}; Cell requires RGB submission")

    # 3. File size check
    size_mb = os.path.getsize(image_path) / (1024 * 1024)
    if size_mb > 20:
        issues.append(f"File size {size_mb:.1f} MB exceeds 20 MB limit")

    # 4. Dimension check (width in mm)
    widths_mm = {
        '2col_single': 85, '2col_1.5': 114, '2col_full': 174,
        '3col_single': 55, '3col_double': 114, '3col_full': 174,
    }
    if layout in widths_mm and dpi[0] > 0:
        max_width_mm = widths_mm[layout]
        actual_width_mm = (img.size[0] / dpi[0]) * 25.4
        print(f"Width at current DPI: {actual_width_mm:.1f} mm (target: {max_width_mm} mm)")

    # Report
    print(f"=== Cell 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"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
```

---

## Pre-Submission Checklist

Before submitting figures to Cell, verify:

- [ ] Color/grayscale images at 300+ DPI
- [ ] Black-and-white images at 500+ DPI
- [ ] Line art at 1,000+ DPI
- [ ] File format is TIFF (LZW), PDF, or EPS
- [ ] Each file under 20 MB
- [ ] Color mode is RGB
- [ ] Font is Avenir, Arial, or Helvetica at ~7 pt
- [ ] Panel labels are uppercase bold (A, B, C)
- [ ] No titles inside figures (use captions)
- [ ] All fonts embedded in AI files
- [ ] No clone/heal tool usage on scientific images
- [ ] All brightness/contrast adjustments applied to entire image
- [ ] Gel lane removals clearly marked in legend
- [ ] Processing details described in Methods
- [ ] Original unprocessed data retained

---

## References

- Cell Press Figure Guidelines: https://www.cell.com/information-for-authors/figure-guidelines
- Cell Press Digital Image Guidelines: https://www.cell.com/matter/figureguidelines
