skills/scientific-writing/general-figure-guide/SKILL.md
Universal QA checklist for generated scientific plots: overlapping labels, clipped text, missing axes/legends, overcrowded data, and cross-journal resolution/format guidance.
npx skillsauth add jaechang-hits/sciagent-skills general-figure-guideInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This guide provides a universal quality checklist for evaluating scientific figures, whether generated programmatically (matplotlib, seaborn, R/ggplot2) or assembled manually. It focuses on visual readability issues that are common across all journals and easily missed during automated plot generation.
A figure must communicate its data without requiring the reader to guess. The most common readability failures are overlapping labels, clipped text that runs outside the figure boundary, missing or unlabeled axes, absent legends, empty plot areas from incorrect data filtering, and overcrowded data points that merge into an unreadable mass.
Scientific figures generally require 300+ DPI for raster output (TIFF, PNG, JPEG) and vector formats (PDF, EPS, SVG) for line art and graphs. Vector formats are preferred for plots because they scale without quality loss. Raster formats are appropriate for photographs and micrographs.
Approximately 8% of males have some form of color vision deficiency. Figures that rely solely on red-green color differences exclude these readers. Use colorblind-friendly palettes (blue-orange, or viridis/cividis colormaps), add pattern or shape differentiation, and test figures with a colorblindness simulator before submission.
All major journals require that brightness, contrast, and color adjustments be applied uniformly to the entire image. Selective enhancement of specific regions (e.g., adjusting one gel lane) is considered data manipulation and grounds for rejection across all journals. Always document processing steps in the Methods section and retain original unprocessed files.
Is the figure a generated plot or a photograph?
├── Generated plot (matplotlib, ggplot2, seaborn)
│ ├── Export as vector (PDF, SVG, EPS) → preferred
│ └── Export as raster → 300+ DPI minimum, PNG or TIFF
├── Photograph or micrograph
│ └── Export as raster → 300+ DPI, TIFF preferred
└── Multi-panel composite
├── Assemble panels first, then export as single file
└── Use consistent font sizes and label styles across panels
| Issue | How to Detect | Fix |
|---|---|---|
| Overlapping labels | Text visually collides on axes or legend | Rotate labels, reduce font size, or increase figure dimensions |
| Clipped text | Labels or titles cut off at figure edge | Increase margins with tight_layout() or constrained_layout |
| Missing axes or legends | No axis labels, units, or legend present | Add xlabel, ylabel, legend() calls |
| Empty plot area | Blank canvas with axes but no visible data | Check data filtering, column names, and plot function arguments |
| Overcrowded data | Points merge into solid mass | Reduce marker size, add transparency (alpha), or use density plots |
tight_layout() or constrained_layout=True: These prevent text clipping at figure boundaries, the most common layout failure in matplotlibfig.set_dpi(300) or plt.savefig(..., dpi=300) to ensure publication-quality output from the startalpha=0.3-0.5 when plotting thousands of points to reveal density structure instead of a solid massfig.tight_layout() or create figures with constrained_layout=Trueax.legend() when plotting more than one series; verify legend entries match the dataalpha transparency, hexbin plots, or kernel density estimation for large datasetsdpi=300 (minimum) in savefig() or set it on the figure object at creationnature-figure-guide -- Nature-specific figure requirementscell-figure-guide -- Cell Press figure requirementsscience-figure-guide -- Science (AAAS) figure requirementspnas-figure-guide -- PNAS figure requirementstools
Fast short-read DNA aligner for WGS/WES/ChIP-seq. 2× faster BWA-MEM successor; outputs SAM/BAM with read group headers for GATK. Primary plus supplementary records for chimeric reads. Use STAR for RNA-seq splice-aware alignment; Bowtie2 is a comparable alternative.
tools
smina molecular docking CLI. AutoDock Vina fork with customizable scoring functions, native SDF/MOL2/PDB ligand input, autoboxing, local energy minimization, and per-atom score breakdowns. Pipeline: receptor PDBQT prep -> ligand prep (RDKit/OpenBabel) -> dock via autobox or explicit grid -> rescore/minimize with custom scoring -> rank poses by affinity. Choose smina over Vina when you need custom scoring terms (--custom_scoring), local optimization of an existing pose (--local_only), per-atom contributions (--atom_term_data), or SDF/MOL2 ligands without manual PDBQT conversion. For unknown binding sites use diffdock-blind-docking; for the Python-bindings/Vinardo workflow use autodock-vina-docking.
development
mdtraj molecular dynamics trajectory analysis (Python). Reads DCD/XTC/TRR/NetCDF/H5/PDB topologies and trajectories; computes RMSD vs time, radius of gyration, per-residue RMSF, residue-residue contact frequency maps, phi/psi torsions for Ramachandran plots (general + Gly/Pro), and 8-state DSSP secondary structure. Modules: trajectory I/O, geometry (distances/angles/dihedrals), structural analysis (RMSD/Rg/RMSF/SASA), contacts, hydrogen bonds, secondary structure (DSSP), NMR observables. For broader atom-selection grammar use mdanalysis-trajectory; for running MD simulations use OpenMM/GROMACS.
development
Programmatic PubMed access via NCBI E-utilities REST API. Covers Boolean/MeSH queries, field-tagged search, endpoints (ESearch, EFetch, ESummary, EPost, ELink), history server for batches, citation matching, systematic review strategies. Use for biomedical literature search or automated pipelines.