Skip to main content

A comprehensive plotting library for bioinformatics and data visualization

Project description

cnsplots

cnsplots logo

Tests Docs PyPI Python Version License

Publication-Ready Scientific Plots for Cell, Nature, and Science Journals

Create visually stunning, journal-quality figures with minimal code. Built on matplotlib, fully compatible with seaborn, and optimized for Adobe Illustrator.

Documentation · Examples Gallery · Report Bug · Request Feature


Overview

Overview

cnsplots is a Python visualization library designed specifically for creating publication-ready scientific figures. It takes care of the tedious styling details so you can focus on your science.

Why cnsplots?

  • 🎨 Publication-Ready: Pre-configured styles matching Cell, Nature, and Science journal requirements
  • 🎯 Simple API: Create complex multi-panel figures with just a few lines of code
  • 📐 Precise Control: Specify dimensions in pixels, perfect for journal submission guidelines
  • 🖋️ Adobe Illustrator Compatible: SVG exports with editable fonts (no text-to-path conversion)
  • 📊 Statistical Integration: Built-in statistical tests and annotations
  • 🔧 Highly Customizable: Full control over colors, fonts, and styling
  • 🌈 Rich Color Palettes: Curated color schemes optimized for scientific visualization
  • 🧩 Multi-Panel Support: Easy creation of complex figure layouts

Features

📊 25+ Plot Types

Basic Plots

  • Box plots, violin plots, bar plots, strip plots
  • Scatter plots, line plots, regression plots
  • Histograms, KDE plots, ridge plots

Scientific Plots

  • Survival plots (Kaplan-Meier)
  • Cumulative incidence plots
  • ROC curves and forest plots
  • Volcano plots and GSEA plots
  • Confusion matrices

Specialized Plots

  • Heatmaps with hierarchical clustering
  • Dot plots for enrichment
  • Venn diagrams and UpSet plots
  • Sankey diagrams
  • Pie and donut charts
  • QQ plots and slope plots

🎨 Beautiful Color Palettes

Multiple curated palettes including:

  • Qualitative: Cell, Nature, Science, Ecotyper1-6, Set1-3, Tableau, Bold
  • Sequential: Parula, gnuplot, custom gradients
  • Diverging: BlueRed, BuRd_custom, OrBu_custom

📐 Multi-Panel Figures

Create complex layouts with automatic panel labeling (A, B, C...):

import cnsplots as cns

mp = cns.multipanel(max_width=540)

# Panel A
mp.panel("A", height=150, width=150)
cns.boxplot(data=df1, x="group", y="value")

# Panel B
mp.panel("B", height=150, width=150)
cns.scatterplot(data=df2, x="x", y="y")

# Continues...

Installation

From PyPI

pip install cnsplots

For Development

First install uv, then:

git clone https://github.com/faridrashidi/cnsplots
cd cnsplots
make install

This installs the package with its development and documentation extras. Core scientific integrations such as scanpy, lifelines, and gseapy remain runtime dependencies of cnsplots itself.

Quick Start

Basic Usage

import cnsplots as cns
import seaborn as sns

# Load example data
df = sns.load_dataset("tips")

# Create a figure (height, width in pixels)
cns.figure(height=150, width=100)

# Create a publication-ready boxplot
cns.boxplot(data=df, x="day", y="total_bill")

# Save as vector graphic
cns.savefig("figure.svg")

Statistical Comparisons

# Add statistical significance annotations
cns.figure(150, 150)
cns.boxplot(
    data=df,
    x="day",
    y="total_bill",
    pairs=[("Thur", "Fri"), ("Sat", "Sun")],  # Compare these pairs
)
# Prints: P-values were determined by two-sided Mann-Whitney U test.

Custom Colors

# Use custom color palette
cns.figure(150, 200, color_cycle="Ecotyper1")
cns.violinplot(data=df, x="day", y="total_bill", hue="sex")

Examples Gallery

Explore our comprehensive examples gallery featuring:

  • 📦 Basic statistical plots
  • 🧬 Genomics and bioinformatics visualizations
  • 📈 Time-series and survival analysis
  • 🎯 Machine learning results (ROC, confusion matrices)
  • 🔬 Multi-omics data visualization
  • 🎨 Custom color schemes and styling

Documentation

Full documentation is available at cnsplots.farid.one

Key Concepts

Figure Dimensions

Specify sizes in pixels for precise control:

cns.figure(height=150, width=100)  # Final canvas size is 150px × 100px

Color Palettes

Access curated color palettes:

# Qualitative palettes (for categorical data)
cns.figure(color_cycle="Ecotyper1")  # Default, optimized for journals
cns.figure(color_cycle="Cell")  # Custom Cell-inspired journal palette
cns.figure(color_cycle="Nature")  # Nature-inspired journal palette
cns.figure(color_cycle="Science")  # Science-inspired journal palette
cns.figure(color_cycle="Set1")  # ColorBrewer Set1

# Sequential palettes (for continuous data)
cns.figure(color_map="parula")  # MATLAB-style
cns.figure(color_map="gnuplot")  # Default sequential

# Get individual colors
red = cns.RED
blue = cns.BLUE

Statistical Tests

Many plot functions include built-in statistical testing:

# Boxplot with Mann-Whitney U test
cns.boxplot(data=df, x="group", y="value", pairs="all")

# Barplot with Welch's t-test
cns.barplot(data=df, x="group", y="value", pairs=[("A", "B")])

# Stackplot with Fisher's exact test
cns.stackplot(data=df, x="group", y="category", pairs=[("A", "B")])

Export for Publication

# SVG for vector graphics (recommended)
cns.savefig("figure.svg")

# High-resolution PNG
cns.savefig("figure.png")

# PDF with editable text
cns.savefig("figure.pdf")

For Illustrator-optimized SVG post-processing, install MuPDF's mutool. Without it, cns.savefig("figure.svg") falls back to a standard matplotlib SVG and emits a warning instead of failing.

Requirements

  • Python ≥ 3.10
  • Core: matplotlib, numpy, pandas, seaborn
  • Included integrations: lifelines, gseapy, scanpy, and other plotting backends
  • Optional external tool: MuPDF's mutool for enhanced SVG post-processing

See pyproject.toml for complete dependency list.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Citation

If you use cnsplots in your research, please cite:

@software{cnsplots,
  author = {Rashidi, Farid},
  title = {cnsplots: Publication-Ready Scientific Plots},
  year = {2026},
  url = {https://github.com/faridrashidi/cnsplots}
}

License

This project is licensed under the BSD 3-Clause License - see the LICENSE.md file for details.

Acknowledgments

Built with:

Inspired by the visualization standards of Cell, Nature, and Science journals.

Support

Related Projects

  • matplotlib - The foundation of Python plotting
  • seaborn - Statistical data visualization
  • plotnine - Grammar of graphics for Python
  • altair - Declarative visualization

Made with ❤️ for the scientific community

⭐ Star us on GitHub · 📖 Documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cnsplots-0.3.0.tar.gz (133.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cnsplots-0.3.0-py3-none-any.whl (102.3 kB view details)

Uploaded Python 3

File details

Details for the file cnsplots-0.3.0.tar.gz.

File metadata

  • Download URL: cnsplots-0.3.0.tar.gz
  • Upload date:
  • Size: 133.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cnsplots-0.3.0.tar.gz
Algorithm Hash digest
SHA256 aca7795e672de39a5562f0515650ebe822be903d149ba46b33a3c5e9547c5e50
MD5 aa2ec422c040f9eea2694934768edae2
BLAKE2b-256 5e910127b4067a4a7c8b3e57ec7dc9aba0eee5230e3b29f9f15c9ca8782f4c56

See more details on using hashes here.

Provenance

The following attestation bundles were made for cnsplots-0.3.0.tar.gz:

Publisher: release-publish.yml on faridrashidi/cnsplots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cnsplots-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: cnsplots-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 102.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cnsplots-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fdc353883fafef65abd058531e5306f2ac041dc2f63e366ac0d0e0814e8aac3d
MD5 903fa4d04fbe55aea3cfac10cef064d4
BLAKE2b-256 b9eb914253ca18a9db9849ffa90f75b123a5068eb17d7fb5465cd4d5ed2298ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for cnsplots-0.3.0-py3-none-any.whl:

Publisher: release-publish.yml on faridrashidi/cnsplots

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page