Stars PyPI Downloads Conda Docs Build Status Discourse topics Chat

Scanpy – Single-Cell Analysis in Python

Scanpy is a scalable toolkit for analyzing single-cell gene expression data built jointly with anndata. It includes preprocessing, visualization, clustering, trajectory inference and differential expression testing. The Python-based implementation efficiently deals with datasets of more than one million cells.


Scanpy hits 100 contributors! 2022-03-31

100 people have contributed to Scanpy’s source code!

Of course, contributions to the project are not limited to direct modification of the source code. Many others have improved the project by building on top of it, participating in development discussions, helping others with usage, or by showing off what it’s helped them accomplish.

Thanks to all our contributors for making this project possible!

New community channels 2022-03-31

We’ve moved our forums and have a new publicly available chat!

Toolkit for spatial (squidpy) and multimodal (muon) published 2022-02-01

Two large toolkits extending our ecosystem to new modalities have had their manuscripts published!

(past news)

Latest additions

Version 1.9

1.9.8 2024-01-26

Bug fixes

  • Fix handling of numpy array palettes for old numpy versions PR 2832 P Angerer

1.9.7 2024-01-25

Bug fixes

1.9.6 2023-10-31

Bug fixes

1.9.5 2023-09-08

Bug fixes

  • Remove use of deprecated dtype argument to AnnData constructor PR 2658 Isaac Virshup

1.9.4 2023-08-24

Bug fixes

1.9.3 2023-03-02

Bug fixes

  • Variety of fixes against pandas 2.0.0rc0 PR 2434 I Virshup

  • Compatibility with anndata 0.9.0rc PR 2435 I Virshup

1.9.2 2023-02-16

Bug fixes

1.9.1 2022-04-05

Bug fixes

  • normalize_total() works when Dask is not installed PR 2209 R Cannoodt

  • Fix embedding plots by bumping matplotlib dependency to version 3.4 PR 2212 I Virshup

1.9.0 2022-04-01


Experimental module


  • filter_rank_genes_groups() now allows to filter with absolute values of log fold change PR 1649 S Rybakov

  • _choose_representation now subsets the provided representation to n_pcs, regardless of the name of the provided representation (should affect mostly neighbors()) PR 2179 I Virshup PG Majev

  • scanpy.external.pp.scrublet() (and related functions) can now be used on AnnData objects containing multiple batches PR 1965 J Manning

  • Number of variables plotted with pca_loadings() can now be controlled with n_points argument. Additionally, variables are no longer repeated if the anndata has less than 30 variables PR 2075 Yves33

  • Dask arrays now work with scanpy.pp.normalize_total() PR 1663 G Buckley, I Virshup

  • embedding_density() now allows more than 10 groups PR 1936 A Wolf

  • Embedding plots can now pass colorbar_loc to specify the location of colorbar legend, or pass None to not show a colorbar PR 1821 A Schaar I Virshup

  • Embedding plots now have a dimensions argument, which lets users select which dimensions of their embedding to plot and uses the same broadcasting rules as other arguments PR 1538 I Virshup

  • print_versions() now uses session_info PR 2089 P Angerer I Virshup


Multiple packages have been added to our ecosystem page, including:

Bug fixes