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