NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4590 most downloaded on PyPI
Single-Cell Analysis in Python.
Last release 1 months ago
28 Aug 2026
Ships fairly regularly
a new release about every 6 weeks
Most releases are documented
notes for 48 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
97 releases · first in 2017
https://scanpy.scverse.org/en/latest/release-notes/index.html#version-1-13
Deprecate scanpy.external and each of its functions. Each function’s deprecation message names its replacement: an upstream package, a successor project, or the scanpy function it will move to. See also the scverse ecosystem P Angerer ( #3645 )
Create scanpy.io and move scanpy.{read*,write*} into it. Deprecate scanpy.read_loom and sc.external.exporting.* P Angerer ( #4299 )
Fetch the bundled datasets through scverse_misc.datasets.fetch() , adding hash verification, retries, and fall back to their pre-S3 upstream URLs. read_10x_h5() and friends now use pooch for downloading, also gaining retries P Angerer ( #4310 )
Fix multi-key scanpy.pp.harmony_integrate() , remove its legacy correction path, and speed up large integrations S Dicks ( #4232 )
Add exact raw counts for pbmc68k_reduced() and clarify its docstring on how the dataset was derived P Angerer ( #4269 )
Move scanpy.external.pp.hashsolo() into scanpy’s main API as scanpy.pp.hashsolo() and deprecate the old location. The new function takes anndata.acc references, so the hashing counts can live in obs , in the data matrix (e.g. A.X[:, ["Hash1", "Hash2"]] ), or all together in obsm (e.g. A.obsm["hto"] ), and writes its results to .obs[key_added] and .obsm[key_added] instead of six unnamespaced .obs columns P Angerer ( #4303 )
Add scanpy.pp.bbknn() , a native implementation of batch balanced kNN [ Polański et al. , 2019 ] S Dicks ( #4306 )
The use_rep parameter of scanpy.pp.neighbors() , scanpy.tl.tsne() , and scanpy.tl.dendrogram() now accepts anndata.acc accessors such as A.X , A.layers["scaled"] , or A.obsm["pca"] , and resolves strings into them if scanpy.settings.preset is ScanpyV2Preview P Angerer ( #4315 )
Derive unset scanpy.pp.harmony_integrate() stopping rules from flavor , speeding up harmony2 considerably: it now follows the Harmony2 defaults, while harmony1 still follows harmony-pytorch S Dicks ( #4290 )
One column per quarter.
(v1.13.0a2)=
2026-08-28scanpy.external and each of its functions. Each function’s deprecation message names its replacement: an upstream package, a successor project, or the scanpy function it will move to. See also the scverse ecosystem {smaller}P Angerer ({pr}3645)scanpy.io and move scanpy.{read*,write*} into it.
Deprecate scanpy.read_loom and sc.external.exporting.* {smaller}P Angerer ({pr}4299)scverse_misc.datasets.fetch, adding hash verification, retries, and fall back to their pre-S3 upstream URLs.
{func}~scanpy.io.read_10x_h5 and friends now use pooch for downloading, also gaining retries {smaller}P Angerer ({pr}4310)scanpy.pp.harmony_integrate, remove its legacy correction path, and speed up large integrations {smaller}S Dicks ({pr}4232)~scanpy.datasets.pbmc68k_reduced and clarify its docstring on how the dataset was derived {smaller}P Angerer ({pr}4269)scanpy.external.pp.hashsolo into scanpy’s main API as {func}scanpy.pp.hashsolo and deprecate the old location.
The new function takes {mod}anndata.acc references, so the hashing counts can live in {attr}~anndata.AnnData.obs, in the data matrix (e.g. A.X[:, ["Hash1", "Hash2"]]), or all together in {attr}~anndata.AnnData.obsm (e.g. A.obsm["hto"]),
and writes its results to .obs[key_added] and .obsm[key_added] instead of six unnamespaced .obs columns {smaller}P Angerer ({pr}4303)scanpy.pp.bbknn, a native implementation of batch balanced kNN {cite:p}Polanski2019 {smaller}S Dicks ({pr}4306)use_rep parameter of {func}scanpy.pp.neighbors, {func}scanpy.tl.tsne, and {func}scanpy.tl.dendrogram now accepts {mod}anndata.acc accessors such as A.X, A.layers["scaled"], or A.obsm["pca"], and resolves strings into them if {attr}scanpy.settings.preset is {attr}~scanpy.Preset.ScanpyV2Preview {smaller}P Angerer ({pr}4315)scanpy.pp.harmony_integrate stopping rules from flavor, speeding up harmony2 considerably: it now follows the Harmony2 defaults, while harmony1 still follows harmony-pytorch {smaller}S Dicks ({pr}4290)https://scanpy.scverse.org/en/latest/release-notes/index.html#version-1-13
Remove compatibility helper for passing parameters positionally P Angerer ( #3984 )
Remove use_highly_variable parameter to scanpy.pp.pca() and scanpy.experimental.pp.normalize_pearson_residuals_pca() P Angerer ( #4039 )
Remove 'rapids' flavor for scanpy.pp.neighbors() , scanpy.tl.louvain() , scanpy.tl.umap() P Angerer ( #4052 )
Remove the superseded functions sc.pp.filter_genes_dispersion and sc.pp.normalize_per_cell P Angerer ( #4010 )
anndata is lower bounded by 0.11.2 I Gold ( #4191 )
Add scanpy.settings.preset setting with the new preset ScanpyV2Preview P Angerer ( #3653 )
Add scanpy.pp.harmony_integrate() with Harmony1 and Harmony2 support for batch correction S Dicks, P Angerer ( #3953 )
Add support for numpy.random.Generator to all functions previously accepting a random_state parameter P Angerer ( #3983 )
Add layer parameter to filter_rank_genes_groups() P Angerer ( #3999 )
add sparse_format parameter to read_10x_mtx() defaulting to CSR E. Provo ( #4017 )
Add mean_in_log_space argument to scanpy.tl.rank_genes_groups() for customizing how log-fold-change is calculated @ilan-gold ( #4037 )
Introduce blazing-fast illico as a new wilcoxon method in rank_genes_groups() . Use it via either method="wilcoxon_illico" or via ScanpyV2Preview (preferred) I Gold
New scanpy2 option-dependency extra to make it easier to transition to the new scanpy 2 defaults I Gold ( #4055 )
Add preset support to the key_added parameter of scanpy.pp.pca() , scanpy.tl.umap() , scanpy.tl.diffmap() , and scanpy.tl.draw_graph() P Angerer ( #4076 )
Added scanpy.settings.override() function for temporarily overriding settings. P Angerer ( #4081 )
Add ncols parameter to scanpy.pl.violin() for wrapping multi-key violins into a grid layout ( #1552 ). O Akinremi ( #4132 )
Add a new Holoviews -based plotting backend for scanpy.pl , used when scanpy.settings.preset is set to ScanpyV2Preview P Angerer ( #4188 )
Add anndata.acc support to scanpy.get.aggregate() . P Angerer ( #4199 )
Run scanpy.tl.umap() in parallel when possible P Angerer ( #4036 )
Changed default scanpy.settings.n_jobs from 1 to 4. P Angerer ( #4081 )
(v1.13.0a1)=
2026-07-24P Angerer ({pr}3984)use_highly_variable parameter to {func}scanpy.pp.pca and {func}scanpy.experimental.pp.normalize_pearson_residuals_pca {smaller}P Angerer ({pr}4039)'rapids' flavor for {func}scanpy.pp.neighbors, {func}scanpy.tl.louvain, {func}scanpy.tl.umap {smaller}P Angerer ({pr}4052)sc.pp.filter_genes_dispersion and sc.pp.normalize_per_cell {smaller}P Angerer ({pr}4010)anndata is lower bounded by 0.11.2 {smaller}I Gold ({pr}4191)Add {attr}scanpy.settings.preset setting with the new preset {attr}~scanpy.Preset.ScanpyV2Preview {smaller}P Angerer ({pr}3653)
Add {func}scanpy.pp.harmony_integrate with Harmony1 and Harmony2 support for batch correction {smaller}S Dicks, P Angerer ({pr}3953)
Add support for {class}numpy.random.Generator to all functions previously accepting a random_state parameter {smaller}P Angerer ({pr}3983)
Add layer parameter to {func}~scanpy.tl.filter_rank_genes_groups {smaller}P Angerer ({pr}3999)
add sparse_format parameter to {func}~scanpy.io.read_10x_mtx defaulting to CSR {smaller}E. Provo ({pr}4017)
Add mean_in_log_space argument to {func}scanpy.tl.rank_genes_groups for customizing how log-fold-change is calculated {user}ilan-gold ({pr}4037)
Introduce blazing-fast illico as a new wilcoxon method in {func}~scanpy.tl.rank_genes_groups. Use it via either method="wilcoxon_illico" or via {attr}~scanpy.Preset.ScanpyV2Preview (preferred) {smaller}I Gold
New scanpy2 option-dependency extra to make it easier to transition to the new scanpy 2 defaults {smaller}I Gold ({pr}4055)
Add preset support to the key_added parameter of {func}scanpy.pp.pca, {func}scanpy.tl.umap, {func}scanpy.tl.diffmap, and {func}scanpy.tl.draw_graph {smaller}P Angerer ({pr}4076)
Added {meth}scanpy.settings.override function for temporarily overriding settings. {smaller}P Angerer ({pr}4081)
Add ncols parameter to {func}scanpy.pl.violin for wrapping multi-key violins into a grid layout ({issue}1552). {smaller}O Akinremi ({pr}4132)
Add a new Holoviews-based plotting backend for {mod}scanpy.pl, used when {attr}scanpy.settings.preset is set to {attr}~scanpy.Preset.ScanpyV2Preview {smaller}P Angerer ({pr}4188)
Add {mod}anndata.acc support to {func}scanpy.get.aggregate. {smaller}P Angerer ({pr}4199)
scanpy.tl.umap in parallel when possible {smaller}P Angerer ({pr}4036)scanpy.settings.n_jobs from 1 to 4. {smaller}P Angerer ({pr}4081)https://scanpy.readthedocs.io/en/stable/release-notes/index.html#v1-12-3
Fix normalize_total() raising UnboundLocalError for CSR matrices when exclude_highly_expressed=False and Numba JIT is disabled S Dicks ( #4231 )
Keep list-based boolean categorical colors stable after subsetting by storing colors for both boolean values. ( #4252 )
Fix normalize_total() computing a different target_sum for sparse and dense input when target_sum=None , so matrices containing zero-count cells normalized inconsistently JOhnsonKC201 ( #4256 )
Fix scrublet() failing with non-unique obs_names , and with cells dropped by its internal filtering when batch_key is used P Angerer ( #4260 )
Make sim() raise instead of silently returning a truncated data matrix when it can’t simulate the requested number of branching realizations P Angerer ( #4263 )
(v1.12.4)=
2026-08-27~scanpy.pp.normalize_total raising UnboundLocalError for CSR matrices when exclude_highly_expressed=False and Numba JIT is disabled {smaller}S Dicks ({pr}4231)4252)~scanpy.pp.normalize_total computing a different target_sum for sparse and dense input when target_sum=None, so matrices containing zero-count cells normalized inconsistently {smaller}JOhnsonKC201 ({pr}4256)~scanpy.pp.scrublet failing with non-unique {attr}~anndata.AnnData.obs_names, and with cells dropped by its internal filtering when batch_key is used {smaller}P Angerer ({pr}4260)~scanpy.tl.sim raise instead of silently returning a truncated data matrix when it can’t simulate the requested number of branching realizations {smaller}P Angerer ({pr}4263)https://scanpy.readthedocs.io/en/stable/release-notes/index.html#v1-12-3
Document that scale() computes variance/std with Bessel’s correction ( ddof=1 ) A McKenna ( #4196 )
Fix scanpy.get.aggregate() on dask arrays when func is a list containing count_nonzero or sum Z Boldyga ( #4192 )
Fix ingest() PCA projection to center query data with the reference mean S Dicks ( #4208 )
Speed up scanpy.tl.rank_genes_groups() vs_rest statistics via a single scanpy.get.aggregate() pass with Chan’s cancellation-free leave-one-out variance Z Boldyga
(v1.12.3)=
2026-07-24~scanpy.pp.scale computes variance/std with Bessel's correction (ddof=1) {smaller}A McKenna ({pr}4196)scanpy.get.aggregate on dask arrays when func is a list containing count_nonzero or sum {smaller}Z Boldyga ({pr}4192)~scanpy.tl.ingest PCA projection to center query data with the reference mean {smaller}S Dicks ({pr}4208)Speed up {func}scanpy.tl.rank_genes_groups vs_rest statistics via a single {func}scanpy.get.aggregate pass with Chan's cancellation-free leave-one-out variance {smaller}Z Boldyga
https://scanpy.readthedocs.io/en/stable/release-notes/index.html#v1-12-2
Clarify that method selects the connectivity kernel and transformer selects the kNN search backend in neighbors() C Gao ( #4079 )
Highlighting rapids-singlecell for GPU users & cleanup documentation. ( #4100 )
Make scanpy.metrics.modularity() produce the exact same results as igraph itself, see here . In Scanpy 2.0, all graphs will be calculated slightly differently, using igraph.Graph.Weighted_Adjacency() . P Angerer ( #4112 )
Download cached dataset files atomically so that parallel processes sharing a dataset directory (e.g. pytest-xdist workers) can no longer read a partially-written file gaoflow ( #4142 )
Fix usage of scanpy.get.aggregate() with mask argument mis-assigning values that are masked out to category 0 + correct group size calculation with mask Z Boldyga ( #4178 )
Fix single-observation (or n_obs == dof ) aggregated variance in scanpy.get.aggregate() Z Boldyga ( #4184 )
scanpy.pp.highly_variable_genes() now does only two passes over the data sequentially for seurat_v3 flavors, greatly reducing dask input usage time I Gold ( #4013 )
Add numba kernels for mean/var/count-nonzero/sum arregation of sparse data in scanpy.get.aggregate() I Gold ( #4062 )
Improve memory usage of scanpy.pp.pca() when run on sparse dask.array.Array I Gold ( #4126 )
Speed up score_genes() by computing the sparse nanmean in a single pass instead of copying the matrix twice L Darrow ( #4141 )
Use Chan’s mean-var algorithm for acceleration of dask-backed scanpy.get.aggregate() I Gold
Use Welford’s algorithm for mean-var calculation in scanpy.get.aggregate() for in-memory (i.e., non-dask) arrays I Gold
(v1.12.2)=
2026-06-29method selects the connectivity kernel and transformer selects the kNN search backend in {func}~scanpy.pp.neighbors {smaller}C Gao ({pr}4079)4100)scanpy.metrics.modularity produce the exact same results as igraph itself,
see here.
In Scanpy 2.0, all graphs will be calculated slightly differently, using {meth}igraph.Graph.Weighted_Adjacency.
{smaller}P Angerer ({pr}4112)pytest-xdist workers) can no longer read a partially-written file {smaller}gaoflow ({pr}4142)scanpy.get.aggregate with mask argument mis-assigning values that are masked out to category 0 + correct group size calculation with mask {smaller}Z Boldyga ({pr}4178)n_obs == dof) aggregated variance in {func}scanpy.get.aggregate {smaller}Z Boldyga ({pr}4184){func}scanpy.pp.highly_variable_genes now does only two passes over the data sequentially for seurat_v3 flavors, greatly reducing dask input usage time {smaller}I Gold ({pr}4013)
Add numba kernels for mean/var/count-nonzero/sum arregation of sparse data in {func}scanpy.get.aggregate {smaller}I Gold ({pr}4062)
Improve memory usage of {func}scanpy.pp.pca when run on sparse {class}dask.array.Array {smaller}I Gold ({pr}4126)
Speed up {func}~scanpy.tl.score_genes by computing the sparse nanmean in a single pass instead of copying the matrix twice {smaller}L Darrow ({pr}4141)
Use Chan's mean-var algorithm for acceleration of dask-backed {func}scanpy.get.aggregate {smaller}I Gold
Use Welford's algorithm for mean-var calculation in {func}scanpy.get.aggregate for in-memory (i.e., non-dask) arrays {smaller}I Gold
https://scanpy.readthedocs.io/en/stable/release-notes/index.html#v1-12-1
Use scverse S3 Cloudfront URLs for datasets zethson ( #4011 )
Prevent segfault when running scanpy.pp.highly_variable_genes() with flavor='seurat_v3{,_paper}' and some all-zero genes P Angerer ( #3980 )
Clarify and deduplicate shared parameter documentation between scanpy.tl.leiden() and scanpy.tl.louvain() Abi ( #3986 )
scanpy.pp.combat() now raises a ValueError when a batch contains fewer than 2 cells, instead of silently producing NaN values in the corrected data L Zhang ( #3994 )
Fix crashes when running numba in dask by using the threadsafe fast_array_utils.numba.njit() P Angerer ( #4015 )
scanpy.tl.umap() no longer silently mutates adata.obsp['connectivities'] via a shared sparse buffer N Justice ( #4031 )
Make scanpy.metrics.modularity() actually use edge weights P Angerer ( #4045 )
(v1.12.1)=
2026-04-10zethson ({pr}4011)scanpy.pp.highly_variable_genes with flavor='seurat_v3{,_paper}' and some all-zero genes {smaller}P Angerer ({pr}3980)scanpy.tl.leiden and {func}scanpy.tl.louvain {smaller}Abi ({pr}3986)scanpy.pp.combat now raises a {class}ValueError when a batch contains fewer than 2 cells, instead of silently producing NaN values in the corrected data {smaller}L Zhang ({pr}3994)fast_array_utils.numba.njit {smaller}P Angerer ({pr}4015)scanpy.tl.umap no longer silently mutates adata.obsp['connectivities'] via a shared sparse buffer {smaller}N Justice ({pr}4031)scanpy.metrics.modularity actually use edge weights {smaller}P Angerer ({pr}4045)Nothing published for this version
https://scanpy.readthedocs.io/en/stable/release-notes/#rc1-2025-11-10
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-5
Add Cell-Cycle Scoring and Regression P Angerer ( #3816 )
Deprecate version and use standard version() API P Angerer ( #3811 )
Optimise scanpy.pp.highly_variable_genes() with batch_key set for dask arrays M Mueller ( #3735 )
(v1.11.5)=
2025-10-20/how-to/cell-cycle {smaller}P Angerer ({pr}3816)__version__ and use standard {func}~importlib.metadata.version API {smaller}P Angerer ({pr}3811)scanpy.pp.highly_variable_genes with batch_key set for dask arrays {smaller}M Mueller ({pr}3735)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-4
(v1.11.4)=
2025-07-30scanpy.pl.umap {smaller}Ilan G ({pr}3725)dask version from anndata for the [dask] extra in scanpy {smaller}I Gold ({pr}3737)~scanpy.tl.leiden with igraph backend on Windows {smaller}P Angerer ({pr}3745)P Angerer ({pr}3747)scipy version {smaller}P Angerer ({pr}3752)/tutorials/basics/clustering-2017 for more compatibility {smaller}I Gold ({pr}3748)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-3
(v1.11.3)=
2025-07-01axis_nnz calculates its chunk size/shape correctly with dask {smaller}I Gold ({pr}3667)np.in1d with np.isin to silence deprecation warnings. {smaller}E Ferdman ({pr}3685)scipy to 1.16.0 due to {issue}statsmodels/statsmodels#9584 {smaller}I Gold ({pr}3695)scanpy.settings {smaller}P Angerer ({pr}3672)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-2
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-2
(v1.11.2)=
2025-05-28P Angerer ({pr}3351)regress_out would fail to work with integer types {smaller}S Dicks ({pr}3461)mask_obs from mutating data {smaller}V Menon ({pr}3496)scanpy.pp.scale from creating a dask {class}~dask.array.Array with {class}numpy.matrix chunks {smaller}P Angerer ({pr}3597)sklearn ≥1.6, {doc}dask:index ≥2024.8, and sphinx ≥8.2.1 {smaller}P Angerer ({pr}3611)ext argument in {func}scanpy.io.read {smaller}I Gold {pr}3643sc.pp.pca(x, zero_center=False) with a sparse dask array. {smaller}P Angerer ({pr}3646)scanpy.pp.pca docs. {smaller}P Angerer ({pr}3655)~scanpy.pp.regress_out {smaller}S Dicks {smaller}I Gold ({pr}3353)pp.normalize_total, the median is now computed in-memory when using Dask {smaller}S Dicks ({pr}3379)pp.normalize_total with a numba kernel for csr-matrices {smaller}S Dicks ({pr}3571)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-1
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-1
Fix compatibility with IPython 9 P Angerer ( #3499 )
Prevent too-low matplotlib version from being used P Angerer ( #3534 )
Allow covariance_eigh as a solver option for pca() with dask.array.Array dense data ilan-gold ( #3528 )
Speed up wilcoxon rank-sum test with numba G Wu ( #3529 )
(v1.11.1)=
2025-03-31P Angerer ({pr}3499)P Angerer ({pr}3534)covariance_eigh as a solver option for {func}~scanpy.pp.pca with {class}dask.array.Array dense data {smaller}ilan-gold ({pr}3528)G Wu ({pr}3529)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0
Release candidates:
rc2 2025-01-24
rc1 2024-12-20
rc1 sample() supports both upsampling and downsampling of observations and variables. subsample() is now deprecated. G Eraslan & P Angerer ( #943 )
rc1 Add layer argument to scanpy.tl.score_genes() and scanpy.tl.score_genes_cell_cycle() L Zappia ( #2921 )
rc1 Prevent raw conflict with layer in score_genes() S Dicks ( #3155 )
rc1 Add support for median as an aggregation function to aggregate() . This allows for median-based aggregation of data (e.g., pseudobulk), complementing existing methods like mean- and sum-based aggregation M Dehkordi (Farhad) ( #3180 )
rc1 Add key_added argument to pca() , tsne() and umap() P Angerer ( #3184 )
rc1 Support running scanpy.pp.pca() on sparse Dask arrays with the 'covariance_eigh' solver P Angerer ( #3263 )
rc1 Use upstreamed PCA implementation for csr_array and csr_matrix (see scikit-learn Version 1.4.0 ) P Angerer ( #3267 )
rc1 Add explicit support to scanpy.pp.pca() for svd_solver='covariance_eigh' P Angerer ( #3296 )
rc1 Add support for dask.array.Array to scanpy.pp.calculate_qc_metrics() I Gold ( #3307 )
rc1 Support layer parameter in scanpy.pl.highest_expr_genes() P Angerer ( #3324 )
rc1 Run numba functions single-threaded when called from inside of a ThreadPool P Angerer ( #3335 )
rc1 Switch print_header() and print_versions() to session_info2 P Angerer ( #3384 )
rc1 Add sampling probabilities/mask parameter p to sample() P Angerer ( #3410 )
rc1 Speed up regress_out() P Ashish, P Angerer & S Dicks ( #3284 )
rc1 Improve harmony_integrate() docs D Kühl ( #3362 )
rc1 Raise FutureWarning when calling deprecated scanpy.pp functions P Angerer ( #3380 )
rc1 P Angerer ( #3407 )
Deprecate …
in favor of …
scanpy.read_visium()
squidpy.read.visium()
scanpy.datasets.visium_sge()
squidpy.datasets.visium()
scanpy.pl.spatial()
squidpy.pl.spatial_scatter()
rc2 Fix reference in scanpy.pp page D Kazemi ( #3418 )
rc1 Upper-bound sklearn <1.6.0 due to dask/dask-ml#1002 Ilan Gold ( #3393 )
rc2 Fix rank_genes_groups() compatibility with data >10M cells P Angerer ( #3426 )
rc2 Fix scanpy.pl.rank_genes_groups() ’s ax parameter P Angerer ( #3428 )
rc2 Fix version number inference in development environments (CI and local) P Angerer ( #3441 )
(v1.11.0)=
2025-02-14Release candidates:
rc2 2025-01-24rc1 2024-12-20rc1 {func}~scanpy.pp.sample supports both upsampling and downsampling of observations and variables. {func}~scanpy.pp.subsample is now deprecated. {smaller}G Eraslan & P Angerer ({pr}943)rc1 Add layer argument to {func}scanpy.tl.score_genes and {func}scanpy.tl.score_genes_cell_cycle {smaller}L Zappia ({pr}2921)rc1 Prevent raw conflict with layer in {func}~scanpy.tl.score_genes {smaller}S Dicks ({pr}3155)rc1 Add support for median as an aggregation function to {func}~scanpy.get.aggregate. This allows for median-based aggregation of data (e.g., pseudobulk), complementing existing methods like mean- and sum-based aggregation {smaller}M Dehkordi (Farhad) ({pr}3180)rc1 Add key_added argument to {func}~scanpy.pp.pca, {func}~scanpy.tl.tsne and {func}~scanpy.tl.umap {smaller}P Angerer ({pr}3184)rc1 Support running {func}scanpy.pp.pca on sparse Dask arrays with the 'covariance_eigh' solver {smaller}P Angerer ({pr}3263)rc1 Use upstreamed {class}~sklearn.decomposition.PCA implementation for {class}~scipy.sparse.csr_array and {class}~scipy.sparse.csr_matrix (see scikit-learn {ref}sklearn:changes_1_4) {smaller}P Angerer ({pr}3267)rc1 Add explicit support to {func}scanpy.pp.pca for svd_solver='covariance_eigh' {smaller}P Angerer ({pr}3296)rc1 Add support for {class}dask.array.Array to {func}scanpy.pp.calculate_qc_metrics {smaller}I Gold ({pr}3307)rc1 Support layer parameter in {func}scanpy.pl.highest_expr_genes {smaller}P Angerer ({pr}3324)rc1 Run numba functions single-threaded when called from inside of a {class}~multiprocessing.pool.ThreadPool {smaller}P Angerer ({pr}3335)rc1 Switch {func}~scanpy.logging.print_header and {func}~scanpy.logging.print_versions to {mod}session_info2 {smaller}P Angerer ({pr}3384)rc1 Add sampling probabilities/mask parameter p to {func}~scanpy.pp.sample {smaller}P Angerer ({pr}3410)rc1 Speed up {func}~scanpy.pp.regress_out {smaller}P Ashish, P Angerer & S Dicks ({pr}3284){guilabel}rc1 Improve {func}~scanpy.pp.harmony_integrate docs {smaller}D Kühl ({pr}3362)
{guilabel}rc1 Raise {exc}FutureWarning when calling deprecated {mod}scanpy.pp functions {smaller}P Angerer ({pr}3380)
{guilabel}rc1 {smaller}P Angerer ({pr}3407)
| Deprecate … | in favor of … |
|---|---|
{func}scanpy.read_visium |
{func}squidpy.read.visium |
{func}scanpy.datasets.visium_sge |
{func}squidpy.datasets.visium |
{func}scanpy.pl.spatial |
{func}squidpy.pl.spatial_scatter |
{guilabel}rc2 Fix reference in {mod}scanpy.pp page {smaller}D Kazemi ({pr}3418)
rc1 Upper-bound {mod}sklearn <1.6.0 due to {issue}dask/dask-ml#1002 {smaller}Ilan Gold ({pr}3393)rc2 Fix {func}~scanpy.tl.rank_genes_groups compatibility with data >10M cells {smaller}P Angerer ({pr}3426)rc2 Fix {func}scanpy.pl.rank_genes_groups’s ax parameter {smaller}P Angerer ({pr}3428)rc2 Fix version number inference in development environments (CI and local) {smaller}P Angerer ({pr}3441)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0rc2
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0rc2
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0rc1
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-11-0rc1
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-4
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-4
Remove Python 3.9 support P Angerer ( #3283 )
Fix scanpy.pl.DotPlot.style() , scanpy.pl.MatrixPlot.style() , and scanpy.pl.StackedViolin.style() resetting all non-specified parameters P Angerer ( #3206 )
Accept 'group' instead of 'obs' for standard_scale parameter in stacked_violin() P Angerer ( #3243 )
Use density_norm instead of of scale (cont. from #2844 ) in violin() and stacked_violin() P Angerer ( #3244 )
Switched all compatibility adapters for positional parameters to FutureWarning P Angerer ( #3264 )
Catch PerfectSeparationWarning during regress_out() J Wagner ( #3275 )
Fix scanpy.pp.highly_variable_genes() for batches of size 1 P Angerer ( #3286 )
Fix scanpy.pl.scatter() ’s color parameter to take collections as advertised P Angerer ( #3299 )
Fix scanpy.pl.highest_expr_genes() when used with a categorical gene symbol column P Angerer ( #3302 )
(v1.10.4)=
2024-11-12P Angerer ({pr}3283)scanpy.pl.DotPlot.style, {meth}scanpy.pl.MatrixPlot.style, and {meth}scanpy.pl.StackedViolin.style resetting all non-specified parameters {smaller}P Angerer ({pr}3206)'group' instead of 'obs' for standard_scale parameter in {func}~scanpy.pl.stacked_violin {smaller}P Angerer ({pr}3243)density_norm instead of of scale (cont. from {pr}2844) in {func}~scanpy.pl.violin and {func}~scanpy.pl.stacked_violin {smaller}P Angerer ({pr}3244)FutureWarning {smaller}P Angerer ({pr}3264)PerfectSeparationWarning during {func}~scanpy.pp.regress_out {smaller}J Wagner ({pr}3275)scanpy.pp.highly_variable_genes for batches of size 1 {smaller}P Angerer ({pr}3286)scanpy.pl.scatter’s color parameter to take collections as advertised {smaller}P Angerer ({pr}3299)scanpy.pl.highest_expr_genes when used with a categorical gene symbol column {smaller}P Angerer ({pr}3302)https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-3
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-3
Prevent empty control gene set in score_genes() M Müller ( #2875 )
Fix subset=True of highly_variable_genes() when flavor is seurat or cell_ranger , and batch_key!=None E Roellin ( #3042 )
Add compatibility with numpy 2.0 P Angerer #3065 and ( #3115 )
Fix legend_loc argument in scanpy.pl.embedding() not accepting matplotlib parameters P Angerer ( #3163 )
Fix dispersion cutoff in highly_variable_genes() in presence of NaN s P Angerer ( #3176 )
Fix axis labeling for swapped axes in rank_genes_groups_stacked_violin() Ilan Gold ( #3196 )
Upper bound dask on account of scverse/anndata#1579 Ilan Gold ( #3217 )
The fa2-modified package replaces forceatlas2 for the latter’s lack of maintenance A Alam ( #3220 )
(v1.10.3)=
2024-09-17Prevent empty control gene set in {func}~scanpy.tl.score_genes {smaller}M Müller ({pr}2875)
Fix subset=True of {func}~scanpy.pp.highly_variable_genes when flavor is seurat or cell_ranger, and batch_key!=None {smaller}E Roellin ({pr}3042)
Add compatibility with {mod}numpy 2.0 {smaller}P Angerer {pr}3065 and ({pr}3115)
Fix legend_loc argument in {func}scanpy.pl.embedding not accepting matplotlib parameters {smaller}P Angerer ({pr}3163)
Fix dispersion cutoff in {func}~scanpy.pp.highly_variable_genes in presence of NaNs {smaller}P Angerer ({pr}3176)
Fix axis labeling for swapped axes in {func}~scanpy.pl.rank_genes_groups_stacked_violin {smaller}Ilan Gold ({pr}3196)
Upper bound dask on account of {issue}scverse/anndata#1579 {smaller}Ilan Gold ({pr}3217)
The fa2-modified package replaces forceatlas2 for the latter’s lack of maintenance {smaller}A Alam ({pr}3220)
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-2
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-2
Add performance benchmarking #2977 R Shrestha , P Angerer
Document several missing parameters in docstring #2888 S Cheney
Fixed incorrect instructions in “testing” dev docs #2994 I Virshup
Update marsilea tutorial to use group_ methods #3001 I Virshup
Fixed citations #3032 P Angerer
Improve dataset documentation #3060 P Angerer
Compatibility with matplotlib 3.9 #2999 I Virshup
Add clear errors where backed mode-like matrices (i.e., from sparse_dataset ) are not supported #3048 I gold
Write out full pca results when _choose_representation is called i.e., neighbors() without pca() #3078 I gold
Fix deprecated use of .A with sparse matrices #3084 P Angerer
Fix zappy support #3089 P Angerer
Fix dotplot group order with pandas 1.x #3101 P Angerer
sparse_mean_variance_axis now uses all cores for the calculations #3015 S Dicks
pp.highly_variable_genes with flavor=seurat_v3 now uses a numba kernel #3017 S Dicks
Speed up scrublet() #3044 S Dicks and #3056 P Angerer
Speed up clipping of array in scale() #3100 P Ashish & S Dicks
(v1.10.2)=
2024-06-252977 {smaller}R Shrestha, {smaller}P Angerer2888 {smaller}S Cheney2994 {smaller}I Virshupgroup_ methods {pr}3001 {smaller}I Virshup3032 {smaller}P Angerer3060 {smaller}P Angerermatplotlib 3.9 {pr}2999 {smaller}I Virshupbacked mode-like matrices (i.e., from sparse_dataset) are not supported {pr}3048 {smaller}I gold_choose_representation is called i.e., {func}~scanpy.pp.neighbors without {func}~scanpy.pp.pca {pr}3078 {smaller}I gold.A with sparse matrices {pr}3084 {smaller}P Angerer3089 {smaller}P Angererpandas 1.x {pr}3101 {smaller}P Angerersparse_mean_variance_axis now uses all cores for the calculations {pr}3015 {smaller}S Dickspp.highly_variable_genes with flavor=seurat_v3 now uses a numba kernel {pr}3017 {smaller}S Dicks~scanpy.pp.scrublet {pr}3044 {smaller}S Dicks and {pr}3056 {smaller}P Angerer~scanpy.pp.scale {pr}3100 {smaller}P Ashish & S Dickshttps://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-1
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-1
Added how-to example on plotting with Marsilea #2974 Y Zheng
Fix aggregate when aggregating by more than two groups #2965 I Virshup
scale() now uses numba kernels for sparse.csr_matrix and sparse.csc_matrix when zero_center==False and mask_obs is provided. This greatly speed up execution #2942 S Dicks
(v1.10.1)=
2024-04-09how-to example </how-to/plotting-with-marsilea> on plotting with Marsilea {pr}2974 {smaller}Y Zhengaggregate when aggregating by more than two groups {pr}2965 {smaller}I Virshup~scanpy.pp.scale now uses numba kernels for sparse.csr_matrix and sparse.csc_matrix when zero_center==False and mask_obs is provided. This greatly speed up execution {pr}2942 {smaller}S Dickshttps://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-0
https://scanpy.readthedocs.io/en/stable/release-notes/#v1-10-0
scanpy 1.10 brings a large amount of new features, performance improvements, and improved documentation.
Some highlights:
Improved support for out-of-core workflows via dask . See new tutorial: Using dask with Scanpy demonstrating counts-to-clusters for 1.4 million cells in <10 min.
A new basic clustering tutorial demonstrating an updated workflow.
Opt-in increased performance for neighbor search and clustering ( how to guide ).
Ability to mask observations or variables from a number of methods (see Customizing Scanpy plots for an example with plotting embeddings)
A new function aggregate() for computing aggregations of your data, very useful for pseudo bulking!
scrublet() and scrublet_simulate_doublets() were moved from scanpy.external.pp to scanpy.pp . The scrublet implementation is now maintained as part of scanpy #2703 P Angerer
scanpy.pp.pca() , scanpy.pp.scale() , scanpy.pl.embedding() , and scanpy.experimental.pp.normalize_pearson_residuals_pca() now support a mask parameter #2272 C Bright, T Marcella, & P Angerer
Enhanced dask support for some internal utilities, paving the way for more extensive dask support #2696 P Angerer
scanpy.pp.highly_variable_genes() supports dask for the default seurat and cell_ranger flavors #2809 P Angerer
New function scanpy.get.aggregate() which allows grouped aggregations over your data. Useful for pseudobulking! #2590 Isaac Virshup Ilan Gold Jon Bloom
scanpy.pp.neighbors() now has a transformer argument allowing the use of different ANN/ KNN libraries #2536 P Angerer
scanpy.experimental.pp.highly_variable_genes() using flavor='pearson_residuals' now uses numba for variance computation and is faster #2612 S Dicks & P Angerer
scanpy.tl.leiden() now offers igraph ’s implementation of the leiden algorithm via via flavor when set to igraph . leidenalg ’s implementation is still default, but discouraged. #2815 I Gold
scanpy.pp.highly_variable_genes() has new flavor seurat_v3_paper that is in its implementation consistent with the paper description in Stuart et al 2018. #2792 E Roellin
scanpy.datasets.blobs() now accepts a random_state argument #2683 E Roellin
scanpy.pp.pca() and scanpy.pp.regress_out() now accept a layer argument #2588 S Dicks
scanpy.pp.subsample() with copy=True can now be called in backed mode #2624 E Roellin
scanpy.pp.harmony_integrate() now runs with 64 bit floats improving reproducibility #2655 S Dicks
scanpy.tl.rank_genes_groups() no longer warns that it’s default was changed from t-test_overestim_var to t-test #2798 L Heumos
scanpy.pp.calculate_qc_metrics now allows qc_vars to be passed as a string #2859 N Teyssier
scanpy.tl.leiden() and scanpy.tl.louvain() now store clustering parameters in the key provided by the key_added parameter instead of always writing to (or overwriting) a default key #2864 J Fan
scanpy.pp.scale() now clips np.ndarray also at - max_value for zero-centering #2913 S Dicks
Support sparse chunks in dask scale() , normalize_total() and highly_variable_genes() ( seurat and cell-ranger tested) #2856 ilan-gold
Doc style overhaul #2220 A Gayoso
Re-add search-as-you-type, this time via readthedocs-sphinx-search #2805 P Angerer
Fixed a lot of broken usage examples #2605 P Angerer
Improved harmonization of return field of sc.pp and sc.tl functions #2742 E Roellin
Improved docs for percent_top argument of calculate_qc_metrics() #2849 I Virshup
New basic clustering tutorial ( Preprocessing and clustering ), based on one from scverse-tutorials #2901 I Virshup
Overhauled Tutorials page, and added new How to section to docs #2901 I Virshup
Added a new tutorial on working with dask ( Using dask with Scanpy ) #2901 I Gold I Virshup
Updated read_visium() such that it can read spaceranger 2.0 files L Lehner
Fix normalize_total() for dask #2466 P Angerer
Fix setting :attr: scanpy.settings.verbosity in some cases #2605 P Angerer
Fix all remaining pandas warnings #2789 P Angerer
Fix some annoying plotting warnings around violin plots #2844 P Angerer
Scanpy now has a test job which tests against the minumum versions of the dependencies. In the process of implementing this, many bugs associated with using older versions of pandas , anndata , numpy , and matplotlib were fixed. #2816 I Virshup
Fix warnings caused by internal usage of pandas.DataFrame.stack with pandas>=2.1 #2864 I Virshup
scanpy.get.aggregate() now always returns numpy.ndarray #2893 S Dicks
Removes self from array of neighbors for use_approx_neighbors = True in scrublet() #2896 S Dicks
Compatibility with scipy 1.13 #2943 I Virshup
Fix use of dendrogram() on highly correlated low precision data #2928 P Angerer
Fix pytest deprecation warning #2879 P Angerer
Scanpy is now tested against python 3.12 #2863 ivirshup
Fix testing package build #2468 P Angerer
Dropped support for Python 3.8. More details here . #2695 P Angerer
Deprecated specifying large numbers of function parameters by position as opposed to by name/keyword in all public APIs. e.g. prefer sc.tl.umap(adata, min_dist=0.1, spread=0.8) over sc.tl.umap(adata, 0.1, 0.8) #2702 P Angerer
Dropped support for umap<0.5 for performance reasons. #2870 P Angerer
(v1.10.0)= ### 1.10.0 {small}`2024-03-26`
scanpy 1.10 brings a large amount of new features, performance improvements, and improved documentation.
Some highlights:
Improved support for out-of-core workflows via dask. See new tutorial: {doc}`/tutorials/experimental/dask` demonstrating counts-to-clusters for 1.4 million cells in <10 min.
A new {doc}`basic clustering tutorial </tutorials/basics/clustering>` demonstrating an updated workflow.
Opt-in increased performance for neighbor search and clustering ({doc}`how to guide </how-to/knn-transformers>`).
Ability to mask observations or variables from a number of methods (see {doc}`/tutorials/plotting/advanced` for an example with plotting embeddings)
A new function {func}`~scanpy.get.aggregate` for computing aggregations of your data, very useful for pseudo bulking!
#### Features
{func}`~scanpy.pp.scrublet` and {func}`~scanpy.pp.scrublet_simulate_doublets` were moved from {mod}`scanpy.external.pp` to {mod}`scanpy.pp`. The scrublet implementation is now maintained as part of scanpy {pr}`2703` {smaller}`P Angerer`
{func}`scanpy.pp.pca`, {func}`scanpy.pp.scale`, {func}`scanpy.pl.embedding`, and {func}`scanpy.experimental.pp.normalize_pearson_residuals_pca` now support a mask parameter {pr}`2272` {smaller}`C Bright, T Marcella, & P Angerer`
Enhanced dask support for some internal utilities, paving the way for more extensive dask support {pr}`2696` {smaller}`P Angerer`
{func}`scanpy.pp.highly_variable_genes` supports dask for the default seurat and cell_ranger flavors {pr}`2809` {smaller}`P Angerer`
New function {func}`scanpy.get.aggregate` which allows grouped aggregations over your data. Useful for pseudobulking! {pr}`2590` {smaller}`Isaac Virshup` {smaller}`Ilan Gold` {smaller}`Jon Bloom`
{func}`scanpy.pp.neighbors` now has a transformer argument allowing the use of different ANN/ KNN libraries {pr}`2536` {smaller}`P Angerer`
{func}`scanpy.experimental.pp.highly_variable_genes` using flavor='pearson_residuals' now uses numba for variance computation and is faster {pr}`2612` {smaller}`S Dicks & P Angerer`
{func}`scanpy.tl.leiden` now offers igraph's implementation of the leiden algorithm via via flavor when set to igraph. leidenalg's implementation is still default, but discouraged. {pr}`2815` {smaller}`I Gold`
{func}`scanpy.pp.highly_variable_genes` has new flavor seurat_v3_paper that is in its implementation consistent with the paper description in Stuart et al 2018. {pr}`2792` {smaller}`E Roellin`
{func}`scanpy.datasets.blobs` now accepts a random_state argument {pr}`2683` {smaller}`E Roellin`
{func}`scanpy.pp.pca` and {func}`scanpy.pp.regress_out` now accept a layer argument {pr}`2588` {smaller}`S Dicks`
{func}`scanpy.pp.subsample` with copy=True can now be called in backed mode {pr}`2624` {smaller}`E Roellin`
{func}`scanpy.pp.harmony_integrate` now runs with 64 bit floats improving reproducibility {pr}`2655` {smaller}`S Dicks`
{func}`scanpy.tl.rank_genes_groups` no longer warns that it's default was changed from t-test_overestim_var to t-test {pr}`2798` {smaller}`L Heumos`
scanpy.pp.calculate_qc_metrics now allows qc_vars to be passed as a string {pr}`2859` {smaller}`N Teyssier`
{func}`scanpy.tl.leiden` and {func}`scanpy.tl.louvain` now store clustering parameters in the key provided by the key_added parameter instead of always writing to (or overwriting) a default key {pr}`2864` {smaller}`J Fan`
{func}`scanpy.pp.scale` now clips np.ndarray also at - max_value for zero-centering {pr}`2913` {smaller}`S Dicks`
Support sparse chunks in dask {func}`~scanpy.pp.scale`, {func}`~scanpy.pp.normalize_total` and {func}`~scanpy.pp.highly_variable_genes` (seurat and cell-ranger tested) {pr}`2856` {smaller}`ilan-gold`
#### Documentation
Doc style overhaul {pr}`2220` {smaller}`A Gayoso`
Re-add search-as-you-type, this time via readthedocs-sphinx-search {pr}`2805` {smaller}`P Angerer`
Fixed a lot of broken usage examples {pr}`2605` {smaller}`P Angerer`
Improved harmonization of return field of sc.pp and sc.tl functions {pr}`2742` {smaller}`E Roellin`
Improved docs for percent_top argument of {func}`~scanpy.pp.calculate_qc_metrics` {pr}`2849` {smaller}`I Virshup`
New basic clustering tutorial ({doc}`/tutorials/basics/clustering`), based on one from [scverse-tutorials](https://scverse-tutorials.readthedocs.io/en/latest/notebooks/basic-scrna-tutorial.html) {pr}`2901` {smaller}`I Virshup`
Overhauled {doc}`/tutorials/index` page, and added new {doc}`/how-to/index` section to docs {pr}`2901` {smaller}`I Virshup`
Added a new tutorial on working with dask ({doc}`/tutorials/experimental/dask`) {pr}`2901` {smaller}`I Gold` {smaller}`I Virshup`
#### Bug fixes
Updated {func}`~scanpy.read_visium` such that it can read spaceranger 2.0 files {smaller}`L Lehner`
Fix {func}`~scanpy.pp.normalize_total` for dask {pr}`2466` {smaller}`P Angerer`
Fix setting scanpy.settings.verbosity in some cases {pr}`2605` {smaller}`P Angerer`
Fix all remaining pandas warnings {pr}`2789` {smaller}`P Angerer`
Fix some annoying plotting warnings around violin plots {pr}`2844` {smaller}`P Angerer`
Scanpy now has a test job which tests against the minumum versions of the dependencies. In the process of implementing this, many bugs associated with using older versions of pandas, anndata, numpy, and matplotlib were fixed. {pr}`2816` {smaller}`I Virshup`
Fix warnings caused by internal usage of pandas.DataFrame.stack with pandas>=2.1 {pr}`2864`{smaller}`I Virshup`
{func}`scanpy.get.aggregate` now always returns {class}`numpy.ndarray` {pr}`2893` {smaller}`S Dicks`
Removes self from array of neighbors for use_approx_neighbors = True in {func}`~scanpy.pp.scrublet` {pr}`2896`{smaller}`S Dicks`
Compatibility with scipy 1.13 {pr}`2943` {smaller}`I Virshup`
Fix use of {func}`~scanpy.tl.dendrogram` on highly correlated low precision data {pr}`2928` {smaller}`P Angerer`
Fix pytest deprecation warning {pr}`2879` {smaller}`P Angerer`
#### Development Process
Scanpy is now tested against python 3.12 {pr}`2863` {smaller}`ivirshup`
Fix testing package build {pr}`2468` {smaller}`P Angerer`
#### Deprecations
Dropped support for Python 3.8. [More details here](https://numpy.org/neps/nep-0029-deprecation_policy.html). {pr}`2695` {smaller}`P Angerer`
Deprecated specifying large numbers of function parameters by position as opposed to by name/keyword in all public APIs. e.g. prefer sc.tl.umap(adata, min_dist=0.1, spread=0.8) over sc.tl.umap(adata, 0.1, 0.8) {pr}`2702` {smaller}`P Angerer`
Dropped support for umap<0.5 for performance reasons. {pr}`2870` {smaller}`P Angerer`
Nothing published for this version
Nothing published for this version
- Fix handling of numpy array palettes for old numpy versions #2832 P Angerer
Fix handling of numpy array palettes for old numpy versions #2832 P Angerer
(v1.9.8)=
2024-01-262832 {smaller}P Angerer- Replace usage of various deprecated functionality from anndata and pandas #2678 #2779 P Angerer
Fix handling of numpy array palettes (e.g. after write-read cycle) #2734 P Angerer
Specify correct version of matplotlib dependency #2733 P Fisher
Fix scanpy.pl.violin() usage of seaborn.catplot #2739 E Roellin
Fix scanpy.pp.highly_variable_genes() to handle the combinations of inplace and subset consistently #2757 E Roellin
Replace usage of various deprecated functionality from anndata and pandas #2678 #2779 P Angerer
Allow to use default n_top_genes when using scanpy.pp.highly_variable_genes() flavor 'seurat_v3' #2782 P Angerer
Fix scanpy.io.read_10x_mtx() ’s gex_only=True mode #2801 P Angerer
(v1.9.7)=
2024-01-252734 {smaller}P Angerermatplotlib dependency {pr}2733 {smaller}P Fisherscanpy.pl.violin usage of seaborn.catplot {pr}2739 {smaller}E Roellinscanpy.pp.highly_variable_genes to handle the combinations of inplace and subset consistently {pr}2757 {smaller}E Roellinanndata and {mod}pandas {pr}2678 {pr}2779 {smaller}P Angerern_top_genes when using {func}scanpy.pp.highly_variable_genes flavor 'seurat_v3' {pr}2782 {smaller}P Angererscanpy.io.read_10x_mtx’s gex_only=True mode {pr}2801 {smaller}P Angerer- Allow scanpy.pl.scatter() to accept a str palette name #2571 P Angerer
Allow scanpy.pl.scatter() to accept a str palette name #2571 P Angerer
Make scanpy.external.tl.palantir() compatible with palantir >=1.3 #2672 DJ Otto
Fix scanpy.pl.pca() when return_fig=True and annotate_var_explained=True #2682 J Wagner
Temp fix for #2680 by skipping seaborn version 0.13.0 #2661 P Angerer
Fix scanpy.pp.highly_variable_genes() to not modify the used layer when flavor=seurat #2698 E Roellin
Prevent pandas from causing infinite recursion when setting a slice of a categorical column #2719 P Angerer
(v1.9.6)=
2023-10-31scanpy.pl.scatter to accept a {class}str palette name {pr}2571 {smaller}P Angererscanpy.external.tl.palantir compatible with palantir >=1.3 {pr}2672 {smaller}DJ Ottoscanpy.pl.pca when return_fig=True and annotate_var_explained=True {pr}2682 {smaller}J Wagner2680 by skipping seaborn version 0.13.0 {pr}2661 {smaller}P Angererscanpy.pp.highly_variable_genes to not modify the used layer when flavor=seurat {pr}2698 {smaller}E Roellin2719 {smaller}P Angerer- Remove use of deprecated dtype argument to AnnData constructor #2658 Isaac Virshup
Remove use of deprecated dtype argument to AnnData constructor #2658 Isaac Virshup
(v1.9.5)=
2023-09-08dtype argument to AnnData constructor {pr}2658 {smaller}Isaac Virshup- Support scikit-learn 1.3 #2515 P Angerer
Support scikit-learn 1.3 #2515 P Angerer
Deal with None value vanishing from things like .uns['log1p'] #2546 SP Shen
Depend on igraph instead of python-igraph #2566 P Angerer
rank_genes_groups() now handles unsorted groups as intended #2589 S Dicks
rank_genes_groups_df() now works for rank_genes_groups() with method="logreg" #2601 S Dicks
scanpy.tl._utils._choose_representation now works with n_pcs if bigger than settings.N_PCS #2610 S Dicks
(v1.9.4)=
2023-08-242515 {smaller}P AngererNone value vanishing from things like .uns['log1p'] {pr}2546 {smaller}SP Shenigraph instead of python-igraph {pr}2566 {smaller}P Angerer~scanpy.tl.rank_genes_groups now handles unsorted groups as intended {pr}2589 {smaller}S Dicks~scanpy.get.rank_genes_groups_df now works for {func}~scanpy.tl.rank_genes_groups with method="logreg" {pr}2601 {smaller}S Dicksscanpy.tl._utils._choose_representation now works with n_pcs if bigger than settings.N_PCS {pr}2610 {smaller}S Dicks- Variety of fixes against pandas 2.0.0rc0 #2434 I Virshup
Variety of fixes against pandas 2.0.0rc0 #2434 I Virshup
(v1.9.3)=
2023-03-022434 {smaller}I Virshup- highly_variable_genes() layer argument now works in tandem with batches #2302 D Schaumont
highly_variable_genes() layer argument now works in tandem with batches #2302 D Schaumont
highly_variable_genes() with flavor='cell_ranger' now handles the case in #2230 where the number of calculated dispersions is less than n_top_genes #2231 L Zappia
Fix compatibility with matplotlib 3.7 #2414 I Virshup P Fisher
Fix scrublet numpy matrix compatibility issue #2395 A Gayoso
(v1.9.2)=
2023-02-16~scanpy.pp.highly_variable_genes layer argument now works in tandem with batches {pr}2302 {smaller}D Schaumont~scanpy.pp.highly_variable_genes with flavor='cell_ranger' now handles the case in {issue}2230 where the number of calculated dispersions is less than n_top_genes {pr}2231 {smaller}L Zappia2414 {smaller}I Virshup {smaller}P Fisher2395 {smaller}A Gayoso- normalize_total() works when Dask is not installed #2209 R Cannoodt
normalize_total() works when Dask is not installed #2209 R Cannoodt
Fix embedding plots by bumping matplotlib dependency to version 3.4 #2212 I Virshup
(v1.9.1)=
2022-04-05~scanpy.pp.normalize_total works when Dask is not installed {pr}2209 {smaller}R Cannoodt2212 {smaller}I Virshup- New tutorial on the usage of Pearson Residuals: How to preprocess UMI count data with analytic Pearson residuals J Lause, G Palla
New tutorial on the usage of Pearson Residuals: How to preprocess UMI count data with analytic Pearson residuals J Lause, G Palla
Materials and recordings for Scanpy workshops by Maren Büttner
Added scanpy.experimental module! Currently contains functionality related to pearson residuals in scanpy.experimental.pp #1715 J Lause, G Palla, I Virshup . This includes:
normalize_pearson_residuals() for Pearson Residuals normalization
highly_variable_genes() for HVG selection with Pearson Residuals
normalize_pearson_residuals_pca() for Pearson Residuals normalization and dimensionality reduction with PCA
recipe_pearson_residuals() for Pearson Residuals normalization, HVG selection and dimensionality reduction with PCA
filter_rank_genes_groups() now allows to filter with absolute values of log fold change #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() ) #2179 I Virshup PG Majev
scanpy.pp.scrublet() (and related functions) can now be used on AnnData objects containing multiple batches #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 #2075 Yves33
Dask arrays now work with scanpy.pp.normalize_total() #1663 G Buckley, I Virshup
embedding_density() now allows more than 10 groups #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 #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 #1538 I Virshup
print_versions() now uses session_info #2089 P Angerer I Virshup
Multiple packages have been added to our ecosystem page, including:
decoupler a for footprint analysis and pathway enrichement #2186 PB Mompel
dandelion for B-cell receptor analysis #1953 Z Tuong
CIARA a feature selection tools for identifying rare cell types #2175 M Stock
Fixed finding variables with use_raw=True and basis=None in scanpy.pl.scatter() #2027 E Rice
Fixed scanpy.pp.scrublet() to address #1957 FlMai and ensure raw counts are used for simulation
Functions in scanpy.datasets no longer throw OldFormatWarnings when using anndata 0.8 #2096 I Virshup
Fixed use of scanpy.pp.neighbors() with method='rapids' : RAPIDS cuML no longer returns a squared Euclidean distance matrix, so we should not square-root the kNN distance matrix. #1828 M Zaslavsky
Removed pytables dependency by implementing read_10x_h5 with h5py due to installation errors on Windows #2064
Fixed bug in scanpy.external.pp.hashsolo() where default value was set improperly #2190 B Reiz
Fixed bug in scanpy.pl.embedding() functions where an error could be raised when there were missing values and large numbers of categories #2187 I Virshup
(v1.9.0)=
2022-04-01/tutorials/experimental/pearson_residuals {smaller}J Lause, G PallaAdded {mod}scanpy.experimental module! Currently contains functionality related to pearson residuals in {mod}scanpy.experimental.pp {pr}1715 {smaller}J Lause, G Palla, I Virshup. This includes:
~scanpy.experimental.pp.normalize_pearson_residuals for Pearson Residuals normalization~scanpy.experimental.pp.highly_variable_genes for HVG selection with Pearson Residuals~scanpy.experimental.pp.normalize_pearson_residuals_pca for Pearson Residuals normalization and dimensionality reduction with PCA~scanpy.experimental.pp.recipe_pearson_residuals for Pearson Residuals normalization, HVG selection and dimensionality reduction with PCA~scanpy.tl.filter_rank_genes_groups now allows to filter with absolute values of log fold change {pr}1649 {smaller}S Rybakov_choose_representation now subsets the provided representation to n_pcs, regardless of the name of the provided representation (should affect mostly {func}~scanpy.pp.neighbors) {pr}2179 {smaller}I Virshup {smaller}PG Majevscanpy.pp.scrublet (and related functions) can now be used on AnnData objects containing multiple batches {pr}1965 {smaller}J Manning~scanpy.pl.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 {smaller}Yves33scanpy.pp.normalize_total {pr}1663 {smaller}G Buckley, I Virshup~scanpy.pl.embedding_density now allows more than 10 groups {pr}1936 {smaller}A Wolfcolorbar_loc to specify the location of colorbar legend, or pass None to not show a colorbar {pr}1821 {smaller}A Schaar {smaller}I Virshupdimensions argument, which lets users select which dimensions of their embedding to plot and uses the same broadcasting rules as other arguments {pr}1538 {smaller}I Virshup~scanpy.logging.print_versions now uses session_info {pr}2089 {smaller}P Angerer {smaller}I VirshupMultiple packages have been added to our ecosystem page, including:
2186 {smaller}PB Mompel1953 {smaller}Z Tuong2175 {smaller}M Stockuse_raw=True and basis=None in {func}scanpy.pl.scatter {pr}2027 {smaller}E Ricescanpy.pp.scrublet to address {issue}1957 {smaller}FlMai and ensure raw counts are used for simulationscanpy.datasets no longer throw OldFormatWarnings when using anndata 0.8 {pr}2096 {smaller}I Virshupscanpy.pp.neighbors with method='rapids': RAPIDS cuML no longer returns a squared Euclidean distance matrix, so we should not square-root the kNN distance matrix. {pr}1828 {smaller}M Zaslavskypytables dependency by implementing read_10x_h5 with h5py due to installation errors on Windows {pr}2064scanpy.external.pp.hashsolo where default value was set improperly {pr}2190 {smaller}B Reizscanpy.pl.embedding functions where an error could be raised when there were missing values and large numbers of categories {pr}2187 {smaller}I Virshup- Update conda installation instructions #1974 L Heumos
Update conda installation instructions #1974 L Heumos
Fix plotting after scanpy.tl.filter_rank_genes_groups() #1942 S Rybakov
Fix use_raw=None using anndata.AnnData.var_names if anndata.AnnData.raw is present in scanpy.tl.score_genes() #1999 M Klein
Fix compatibility with UMAP 0.5.2 #2028 L Mcinnes
Fixed non-determinism in scanpy.pl.paga() node positions #1922 I Virshup
Added PASTE (a tool to align and integrate spatial transcriptomics data) to scanpy ecosystem.
(v1.8.2)=
2021-11-31974 {smaller}L Heumosscanpy.tl.filter_rank_genes_groups {pr}1942 {smaller}S Rybakovuse_raw=None using {attr}anndata.AnnData.var_names if {attr}anndata.AnnData.raw
is present in {func}scanpy.tl.score_genes {pr}1999 {smaller}M Klein2028 {smaller}L Mcinnesscanpy.pl.paga node positions {pr}1922 {smaller}I Virshup- Fixed reproducibility of scanpy.tl.score_genes() . Calculation and output is now float64 type. #1890 I Kucinski
Fixed reproducibility of scanpy.tl.score_genes() . Calculation and output is now float64 type. #1890 I Kucinski
Workarounds for some changes/ bugs in pandas 1.3 #1918 I Virshup
Fixed bug where sc.pl.paga_compare could mislabel nodes on the paga graph #1898 I Virshup
Fixed handling of use_raw with scanpy.tl.rank_genes_groups() #1934 I Virshup
(v1.8.1)=
2021-07-07scanpy.tl.score_genes. Calculation and output is now float64 type. {pr}1890 {smaller}I Kucinski1918 {smaller}I Virshupsc.pl.paga_compare could mislabel nodes on the paga graph {pr}1898 {smaller}I Virshupuse_raw with {func}scanpy.tl.rank_genes_groups {pr}1934 {smaller}I Virshup- Deprecated layers and layers_norm kwargs to normalize_total() #1667 I Virshup
Added scanpy.metrics module!
Added scanpy.metrics.gearys_c() for spatial autocorrelation #915 I Virshup
Added scanpy.metrics.morans_i() for global spatial autocorrelation #1740 I Virshup, G Palla
Added scanpy.metrics.confusion_matrix() for comparing labellings #915 I Virshup
Added layer and copy kwargs to normalize_total() #1667 I Virshup
Added vcenter and norm arguments to the plotting functions #1551 G Eraslan
Standardized and expanded available arguments to the sc.pl.rank_genes_groups* family of functions. #1529 F Ramirez I Virshup
See examples sections of rank_genes_groups_dotplot() and rank_genes_groups_matrixplot() for demonstrations.
scanpy.tl.tsne() now supports the metric argument and records the passed parameters #1854 I Virshup
scanpy.pl.scrublet_score_distribution() now uses same API as other scanpy functions for saving/ showing plots #1741 J Manning
Added Cubé to ecosystem page #1878 C Lambden
Added triku a feature selection method to the ecosystem page #1722 AM Ascensión
Added dorothea and progeny to the ecosystem page #1767 P Badia-i-Mompel
Added Community page to docs #1856 I Virshup
Added rendered examples to many plotting functions #1664 A Schaar L Zappia bio-la L Hetzel L Dony M Buttner K Hrovatin F Ramirez I Virshup LouisK92 mayarali
Integrated DocSearch , a find-as-you-type documentation index search. #1754 P Angerer
Reorganized reference docs #1753 I Virshup
Clarified docs issues for neighbors() , diffmap() , calculate_qc_metrics() #1680 G Palla
Fixed typos in grouped plot doc-strings #1877 C Rands
Extended examples for differential expression plotting. #1529 F Ramirez
See rank_genes_groups_dotplot() or rank_genes_groups_matrixplot() for examples.
Fix scanpy.pl.paga_path() TypeError with recent versions of anndata #1047 P Angerer
Fix detection of whether IPython is running #1844 I Virshup
Fixed reproducibility of scanpy.tl.diffmap() (added random_state) #1858 I Kucinski
Fixed errors and warnings from embedding plots with small numbers of categories after sns.set_palette was called #1886 I Virshup
Fixed handling of gene_symbols argument in a number of sc.pl.rank_genes_groups* functions #1529 F Ramirez I Virshup
Fixed handling of use_raw for sc.tl.rank_genes_groups when no .raw is present #1895 I Virshup
scanpy.pl.rank_genes_groups_violin() now works for raw=False #1669 M van den Beek
scanpy.pl.dotplot() now uses smallest_dot argument correctly #1771 S Flemming
Switched to flit for building and deploying the package, a simple tool with an easy to understand command line interface and metadata #1527 P Angerer
Use pre-commit for style checks #1684 #1848 L Heumos I Virshup
Dropped support for Python 3.6. More details here . #1897 I Virshup
Deprecated layers and layers_norm kwargs to normalize_total() #1667 I Virshup
Deprecated MulticoreTSNE backend for scanpy.tl.tsne() #1854 I Virshup
(v1.8.0)=
2021-06-28Added {mod}scanpy.metrics module!
scanpy.metrics.gearys_c for spatial autocorrelation {pr}915 {smaller}I Virshupscanpy.metrics.morans_i for global spatial autocorrelation {pr}1740 {smaller}I Virshup, G Pallascanpy.metrics.confusion_matrix for comparing labellings {pr}915 {smaller}I Virshuplayer and copy kwargs to {func}~scanpy.pp.normalize_total {pr}1667 {smaller}I Virshupvcenter and norm arguments to the plotting functions {pr}1551 {smaller}G Eraslansc.pl.rank_genes_groups* family of functions. {pr}1529 {smaller}F Ramirez {smaller}I Virshup
~scanpy.pl.rank_genes_groups_dotplot and {func}~scanpy.pl.rank_genes_groups_matrixplot for demonstrations.scanpy.tl.tsne now supports the metric argument and records the passed parameters {pr}1854 {smaller}I Virshupscanpy.pl.scrublet_score_distribution now uses same API as other scanpy functions for saving/ showing plots {pr}1741 {smaller}J Manning1878 {smaller}C Lambdentriku a feature selection method to the ecosystem page {pr}1722 {smaller}AM Ascensióndorothea and progeny to the ecosystem page {pr}1767 {smaller}P Badia-i-Mompel/community page to docs {pr}1856 {smaller}I Virshup1664 {smaller}A Schaar {smaller}L Zappia {smaller}bio-la {smaller}L Hetzel {smaller}L Dony {smaller}M Buttner {smaller}K Hrovatin {smaller}F Ramirez {smaller}I Virshup {smaller}LouisK92 {smaller}mayarali1754 {smaller}P Angerer1753 {smaller}I Virshup~scanpy.pp.neighbors,
{func}~scanpy.tl.diffmap, {func}~scanpy.pp.calculate_qc_metrics {pr}1680 {smaller}G Palla1877 {smaller}C Rands1529 {smaller}F Ramirez
~scanpy.pl.rank_genes_groups_dotplot or {func}~scanpy.pl.rank_genes_groups_matrixplot for examples.scanpy.pl.paga_path TypeError with recent versions of anndata {pr}1047 {smaller}P Angerer1844 {smaller}I Virshupscanpy.tl.diffmap (added random_state) {pr}1858 {smaller}I Kucinskisns.set_palette was called {pr}1886 {smaller}I Virshupgene_symbols argument in a number of sc.pl.rank_genes_groups* functions {pr}1529 {smaller}F Ramirez {smaller}I Virshupuse_raw for sc.tl.rank_genes_groups when no .raw is present {pr}1895 {smaller}I Virshupscanpy.pl.rank_genes_groups_violin now works for raw=False {pr}1669 {smaller}M van den Beekscanpy.pl.dotplot now uses smallest_dot argument correctly {pr}1771 {smaller}S Flemming1527 {smaller}P Angerer1684 {pr}1848 {smaller}L Heumos {smaller}I Virshup1897 {smaller}I Virshuplayers and layers_norm kwargs to {func}~scanpy.pp.normalize_total {pr}1667 {smaller}I VirshupMulticoreTSNE backend for {func}scanpy.tl.tsne {pr}1854 {smaller}I Virshup- scanpy.logging.print_versions() now works when python<3.8 #1691 I Virshup
scanpy.logging.print_versions() now works when python<3.8 #1691 I Virshup
scanpy.pp.regress_out() now uses joblib as the parallel backend, and should stop oversubscribing threads #1694 I Virshup
scanpy.pp.highly_variable_genes() with flavor="seurat_v3" now returns correct gene means and -variances when used with batch_key #1732 J Lause
scanpy.pp.highly_variable_genes() now throws a warning instead of an error when non-integer values are passed for method "seurat_v3" . The check can be skipped by passing check_values=False . #1679 G Palla
Added triku a feature selection method to the ecosystem page #1722 AM Ascensión
Added dorothea and progeny to the ecosystem page #1767 P Badia-i-Mompel
(v1.7.2)=
2021-04-07scanpy.logging.print_versions now works when python<3.8 {pr}1691 {smaller}I Virshupscanpy.pp.regress_out now uses joblib as the parallel backend, and should stop oversubscribing threads {pr}1694 {smaller}I Virshupscanpy.pp.highly_variable_genes with flavor="seurat_v3" now returns correct gene means and -variances when used with batch_key {pr}1732 {smaller}J Lausescanpy.pp.highly_variable_genes now throws a warning instead of an error when non-integer values are passed for method "seurat_v3". The check can be skipped by passing check_values=False. {pr}1679 {smaller}G Pallatriku a feature selection method to the ecosystem page {pr}1722 {smaller}AM Ascensióndorothea and progeny to the ecosystem page {pr}1767 {smaller}P Badia-i-Mompel- More twitter handles for core devs #1676 G Eraslan
More twitter handles for core devs #1676 G Eraslan
dendrogram() use 1 - correlation as distance matrix to compute the dendrogram #1614 F Ramirez
Fixed obs_df() / var_df() erroring when keys not passed #1637 I Virshup
Fixed argument handling for scanpy.pp.scrublet() J Manning
Fixed passing of kwargs to scanpy.pl.violin() when stripplot was also used #1655 M van den Beek
Fixed colorbar creation in scanpy.pl.timeseries_as_heatmap #1654 M van den Beek
(v1.7.1)=
2021-02-241676 {smaller}G Eraslan~scanpy.tl.dendrogram use 1 - correlation as distance matrix to compute the dendrogram {pr}1614 {smaller}F Ramirez~scanpy.get.obs_df/ {func}~scanpy.get.var_df erroring when keys not passed {pr}1637 {smaller}I Virshupscanpy.pp.scrublet {smaller}J Manningkwargs to {func}scanpy.pl.violin when stripplot was also used {pr}1655 {smaller}M van den Beekscanpy.pl.timeseries_as_heatmap {pr}1654 {smaller}M van den Beek- Deprecate scanpy.external.pp.scvi #1554 G Xing
Add new 10x Visium datasets to visium_sge() #1473 G Palla
Enable download of source image for 10x visium datasets in visium_sge() #1506 H Spitzer
Refactor of scanpy.pl.spatial() . Better support for plotting without an image, as well as directly providing images #1512 G Palla
Dict input for scanpy.queries.enrich() #1488 G Eraslan
rank_genes_groups_df() can now return fraction of cells in a group expressing a gene, and allows retrieving values for multiple groups at once #1388 G Eraslan
Color annotations for gene sets in heatmap() are now matched to color for cluster #1511 L Sikkema
PCA plots can now annotate axes with variance explained #1470 bfurtwa
Plots with groupby arguments can now group by values in the index by passing the index’s name (like pd.DataFrame.groupby ). #1583 F Ramirez
Added na_color and na_in_legend keyword arguments to embedding() plots. Allows specifying color for missing or filtered values in plots like umap() or spatial() #1356 I Virshup
embedding() plots now support passing dict of {cluster_name: cluster_color, ...} for palette argument #1392 I Virshup
Add Scanorama integration to scanpy external API ( scanorama_integrate() , Hie et al. [ 2019 ] ) #1332 B Hie
Scrublet [ Wolock et al. , 2019 ] integration: scrublet() , scrublet_simulate_doublets() , and plotting method scrublet_score_distribution() #1476 J Manning
hashsolo() for HTO demultiplexing [ Bernstein et al. , 2020 ] #1432 NJ Bernstein
Added scirpy (sc-AIRR analysis) to ecosystem page #1453 G Sturm
Added scvi-tools to ecosystem page #1421 A Gayoso
Updates for palantir() and palantir_results() #1245 A Mousa
Fixes to harmony_timeseries() docs #1248 A Mousa
Support for leiden clustering by scanpy.external.tl.phenograph() #1080 A Mousa
Deprecate scanpy.external.pp.scvi #1554 G Xing
Updated default params of sam() to work with larger data #1540 A Tarashansky
New contribution guide #1544 I Virshup
zsh installation instructions #1444 P Angerer
Speed up read_10x_h5() #1402 P Weiler
Speed ups for obs_df() #1499 F Ramirez
Consistent fold-change, fractions calculation for filter_rank_genes_groups #1391 S Rybakov
Fixed bug where score_genes would error if one gene was passed #1398 I Virshup
Fixed log1p inplace on integer dense arrays #1400 I Virshup
Fix docstring formatting for rank_genes_groups() #1417 P Weiler
Removed PendingDeprecationWarnings from use of np.matrix #1424 P Weiler
Fixed indexing byg in ~scanpy.pp.highly_variable_genes #1456 V Bergen
Fix default number of genes for marker_genes_overlap #1464 MD Luecken
Fixed passing groupby and dendrogram_key to dendrogram() #1465 M Varma
Fixed download path of pbmc3k_processed #1472 D Strobl
Better error message when computing DE with a group of size 1 #1490 J Manning
Update cugraph API usage for v0.16 #1494 R Ilango
Fixed marker_gene_overlap default value for top_n_markers #1464 MD Luecken
Pass random_state to RAPIDs UMAP #1474 C Nolet
Fixed anndata version requirement for concat() (re-exported from scanpy as sc.concat ) #1491 I Virshup
Fixed the width of the progress bar when downloading data #1507 M Klein
Updated link for moignard15 dataset #1542 I Virshup
Fixed bug where calling set_figure_params could block if IPython was installed, but not used. #1547 I Virshup
violin() no longer fails if .raw not present #1548 I Virshup
spatial() refactoring and better handling of spatial data #1512 G Palla
pca() works with chunked=True again #1592 I Virshup
ingest() now works with umap-learn 0.5.0 #1601 S Rybakov
(v1.7.0)=
2021-02-03~scanpy.datasets.visium_sge {pr}1473 {smaller}G Palla~scanpy.datasets.visium_sge {pr}1506 {smaller}H Spitzerscanpy.pl.spatial. Better support for plotting without an image, as well as directly providing images {pr}1512 {smaller}G Pallascanpy.queries.enrich {pr}1488 {smaller}G Eraslan~scanpy.get.rank_genes_groups_df can now return fraction of cells in a group expressing a gene, and allows retrieving values for multiple groups at once {pr}1388 {smaller}G Eraslan~scanpy.pl.heatmap are now matched to color for cluster {pr}1511 {smaller}L Sikkema1470 {smaller}bfurtwagroupby arguments can now group by values in the index by passing the index's name (like pd.DataFrame.groupby). {pr}1583 {smaller}F Ramirezna_color and na_in_legend keyword arguments to {func}~scanpy.pl.embedding plots. Allows specifying color for missing or filtered values in plots like {func}~scanpy.pl.umap or {func}~scanpy.pl.spatial {pr}1356 {smaller}I Virshup~scanpy.pl.embedding plots now support passing dict of {cluster_name: cluster_color, ...} for palette argument {pr}1392 {smaller}I Virshup~scanpy.external.pp.scanorama_integrate, {cite:t}Hie2019) {pr}1332 {smaller}B HieWolock2019 integration: {func}~scanpy.pp.scrublet, {func}~scanpy.pp.scrublet_simulate_doublets, and plotting method {func}~scanpy.pl.scrublet_score_distribution {pr}1476 {smaller}J Manning~scanpy.external.pp.hashsolo for HTO demultiplexing {cite:p}Bernstein2020 {pr}1432 {smaller}NJ Bernstein1453 {smaller}G Sturm1421 {smaller}A Gayoso~scanpy.external.tl.palantir and {func}~scanpy.external.tl.palantir_results {pr}1245 {smaller}A Mousa~scanpy.external.tl.harmony_timeseries docs {pr}1248 {smaller}A Mousaleiden clustering by {func}scanpy.external.tl.phenograph {pr}1080 {smaller}A Mousascanpy.external.pp.scvi {pr}1554 {smaller}G Xing~scanpy.external.tl.sam to work with larger data {pr}1540 {smaller}A TarashanskyNew contribution guide <contribution-guide> {pr}1544 {smaller}I Virshupzsh installation instructions {pr}1444 {smaller}P Angerer~scanpy.io.read_10x_h5 {pr}1402 {smaller}P Weiler~scanpy.get.obs_df {pr}1499 {smaller}F Ramirez1391 {smaller}S Rybakovscore_genes would error if one gene was passed {pr}1398 {smaller}I Virshuplog1p inplace on integer dense arrays {pr}1400 {smaller}I Virshup~scanpy.tl.rank_genes_groups {pr}1417 {smaller}P WeilerPendingDeprecationWarning`s from use of `np.matrix {pr}1424 {smaller}P Weiler~scanpy.pp.highly_variable_genes {pr}1456 {smaller}V Bergen1464 {smaller}MD Lueckengroupby and dendrogram_key to {func}~scanpy.tl.dendrogram {pr}1465 {smaller}M Varmapbmc3k_processed {pr}1472 {smaller}D Strobl1490 {smaller}J Manning1494 {smaller}R Ilangomarker_gene_overlap default value for top_n_markers {pr}1464 {smaller}MD Lueckenrandom_state to RAPIDs UMAP {pr}1474 {smaller}C Noletanndata version requirement for {func}~anndata.concat (re-exported from scanpy as sc.concat) {pr}1491 {smaller}I Virshup1507 {smaller}M Kleinmoignard15 dataset {pr}1542 {smaller}I Virshupset_figure_params could block if IPython was installed, but not used. {pr}1547 {smaller}I Virshup~scanpy.pl.violin no longer fails if .raw not present {pr}1548 {smaller}I Virshup~scanpy.pl.spatial refactoring and better handling of spatial data {pr}1512 {smaller}G Palla~scanpy.pp.pca works with chunked=True again {pr}1592 {smaller}I Virshup~scanpy.tl.ingest now works with umap-learn 0.5.0 {pr}1601 {smaller}S RybakovNothing published for this version
Nothing published for this version
This release includes an overhaul of dotplot() , matrixplot() , and stacked_violin() ( #1210 F Ramirez ), and of the internals of rank_genes_groups()
This release includes an overhaul of dotplot() , matrixplot() , and stacked_violin() ( #1210 F Ramirez ), and of the internals of rank_genes_groups() ( #1156 S Rybakov ).
An overhauled tutorial Core plotting functions .
New plotting classes can be accessed directly (e.g., DotPlot ) or using the return_fig param.
It is possible to plot log fold change and p-values in the rank_genes_groups_dotplot() family of functions.
Added ax parameter which allows embedding the plot in other images.
Added option to include a bar plot instead of the dendrogram containing the cell/observation totals per category.
Return a dictionary of axes for further manipulation. This includes the main plot, legend and dendrogram to totals
Legends can be removed.
The groupby param can take a list of categories, e.g., groupby=[‘tissue’, ‘cell type’] .
Added padding parameter to dotplot and stacked_violin . #1270
Added title for colorbar and positioned as in dotplot for matrixplot() .
dotplot() changes:
Improved the colorbar and size legend for dotplots. Now the colorbar and size have titles, which can be modified using the colorbar_title and size_title params. They also align at the bottom of the image and do not shrink if the dotplot image is smaller.
Allow plotting genes in rows and categories in columns ( swap_axes ).
Using DotPlot , the dot_edge_color and line width can be modified, a grid can be added, and other modifications are enabled.
A new style was added in which the dots are replaced by an empty circle and the square behind the circle is colored (like in matrixplots).
stacked_violin() changes:
Violin colors can be colored based on average gene expression as in dotplots.
The linewidth of the violin plots is thinner.
Removed the tics for the y-axis as they tend to overlap with each other. Using the style method they can be displayed if needed.
concat() is now exported from scanpy, see Concatenation for more info. #1338 I Virshup
Added highly variable gene selection strategy from Seurat v3 #1204 A Gayoso
Added CellRank to scanpy ecosystem #1304 giovp
Added backup_url param to read_10x_h5() #1296 A Gayoso
Allow prefix for read_10x_mtx() #1250 G Sturm
Optional tie correction for the 'wilcoxon' method in rank_genes_groups() #1330 S Rybakov
Use sinfo for print_versions() and add print_header() to do what it previously did. #1338 I Virshup #1373
Avoid warning in rank_genes_groups() if ‘t-test’ is passed #1303 A Wolf
Restrict sphinx version to <3.1, >3.0 #1297 I Virshup
Clean up _ranks and fix dendrogram for scipy 1.5 #1290 S Rybakov
Use .raw to translate gene symbols if applicable #1278 E Rice
Fix diffmap ( #1262 ) G Eraslan
Fix neighbors in spring_project #1260 S Rybakov
Fix default size of dot in spatial plots #1255 #1253 giovp
Bumped version requirement of scipy to scipy>1.4 to support rmatmat argument of LinearOperator #1246 I Virshup
Fix asymmetry of scores for the 'wilcoxon' method in rank_genes_groups() #754 S Rybakov
Avoid trimming of gene names in rank_genes_groups() #753 S Rybakov
(v1.6.0)=
2020-08-15This release includes an overhaul of {func}~scanpy.pl.dotplot, {func}~scanpy.pl.matrixplot, and {func}~scanpy.pl.stacked_violin ({pr}1210 {smaller}F Ramirez), and of the internals of {func}~scanpy.tl.rank_genes_groups ({pr}1156 {smaller}S Rybakov).
~scanpy.pl.dotplot, {func}~scanpy.pl.matrixplot, and {func}~scanpy.pl.stacked_violin {pr}1210 {smaller}F RamirezAn overhauled tutorial {doc}/tutorials/plotting/core.
New plotting classes can be accessed directly (e.g., {class}~scanpy.pl.DotPlot) or using the return_fig param.
It is possible to plot log fold change and p-values in the {func}~scanpy.pl.rank_genes_groups_dotplot family of functions.
Added ax parameter which allows embedding the plot in other images.
Added option to include a bar plot instead of the dendrogram containing the cell/observation totals per category.
Return a dictionary of axes for further manipulation. This includes the main plot, legend and dendrogram to totals
Legends can be removed.
The groupby param can take a list of categories, e.g., groupby=[‘tissue’, ‘cell type’].
Added padding parameter to dotplot and stacked_violin. {pr}1270
Added title for colorbar and positioned as in dotplot for {func}~scanpy.pl.matrixplot.
{func}~scanpy.pl.dotplot changes:
- Improved the colorbar and size legend for dotplots. Now the colorbar and size have titles, which can be modified using the
colorbar_titleandsize_titleparams. They also align at the bottom of the image and do not shrink if the dotplot image is smaller.- Allow plotting genes in rows and categories in columns (
swap_axes).- Using {class}
~scanpy.pl.DotPlot, thedot_edge_colorand line width can be modified, a grid can be added, and other modifications are enabled.- A new style was added in which the dots are replaced by an empty circle and the square behind the circle is colored (like in matrixplots).
{func}~scanpy.pl.stacked_violin changes:
- Violin colors can be colored based on average gene expression as in dotplots.
- The linewidth of the violin plots is thinner.
- Removed the tics for the y-axis as they tend to overlap with each other. Using the style method they can be displayed if needed.
~anndata.concat is now exported from scanpy, see {doc}anndata:tutorials/concatenation for more info. {pr}1338 {smaller}I Virshup1204 {smaller}A Gayoso1304 {smaller}giovpbackup_url param to {func}~scanpy.io.read_10x_h5 {pr}1296 {smaller}A Gayoso~scanpy.io.read_10x_mtx {pr}1250 {smaller}G Sturm'wilcoxon' method in {func}~scanpy.tl.rank_genes_groups {pr}1330 {smaller}S Rybakovsinfo for {func}~scanpy.logging.print_versions and add {func}~scanpy.logging.print_header to do what it previously did. {pr}1338 {smaller}I Virshup {pr}1373~scanpy.tl.rank_genes_groups if 't-test' is passed {pr}1303 {smaller}A Wolf1297 {smaller}I Virshup_ranks and fix dendrogram for scipy 1.5 {pr}1290 {smaller}S Rybakov.raw to translate gene symbols if applicable {pr}1278 {smaller}E Ricediffmap ({issue}1262) {smaller}G Eraslanneighbors in spring_project {issue}1260 {smaller}S Rybakov1255 {issue}1253 {smaller}giovpscipy to scipy>1.4 to support rmatmat argument of LinearOperator {issue}1246 {smaller}I Virshup'wilcoxon' method in {func}~scanpy.tl.rank_genes_groups {issue}754 {smaller}S Rybakov~scanpy.tl.rank_genes_groups {issue}753 {smaller}S Rybakov- Fixed a bug in pca() , where random_state did not have an effect for sparse input #1240 I Virshup
Fixed a bug in pca() , where random_state did not have an effect for sparse input #1240 I Virshup
Fixed docstring in pca() which included an unused argument #1240 I Virshup
(v1.5.1)=
2020-05-21~scanpy.pp.pca, where random_state did not have an effect for sparse input {pr}1240 {smaller}I Virshup~scanpy.pp.pca which included an unused argument {pr}1240 {smaller}I VirshupThe 1.5.0 release adds a lot of new functionality, much of which takes advantage of anndata updates 0.7.0 - 0.7.2 . Highlights of this release include
The 1.5.0 release adds a lot of new functionality, much of which takes advantage of anndata updates 0.7.0 - 0.7.2 . Highlights of this release include support for spatial data, dedicated handling of graphs in AnnData, sparse PCA, an interface with scvi, and others.
Tutorials for basic analysis and integration with single cell data G Palla
read_visium() read 10x Visium data #1034 G Palla, P Angerer, I Virshup
visium_sge() load Visium data directly from 10x Genomics #1013 M Mirkazemi, G Palla, P Angerer
spatial() plot spatial data #1012 G Palla, P Angerer
Many functions, like neighbors() and umap() , now store cell-by-cell graphs in obsp #1118 S Rybakov
scale() and log1p() can be used on any element in layers or obsm #1173 I Virshup
scanpy.external.pp.scvi for preprocessing with scVI #1085 G Xing
Guide for using Scanpy in R #1186 L Zappia
pca() now uses efficient implicit centering for sparse matrices. This can lead to signifigantly improved performance for large datasets #1066 A Tarashansky
score_genes() now has an efficient implementation for sparse matrices with missing values #1196 redst4r .
Warning
The new pca() implementation can result in slightly different results for sparse matrices. See the pr ( #1066 ) and documentation for more info.
stacked_violin() can now be used as a subplot #1084 P Angerer
score_genes() has improved logging #1119 G Eraslan
scale() now saves mean and standard deviation in the var #1173 A Wolf
harmony_timeseries() #1091 A Mousa
combat() now works when obs_names aren’t unique. #1215 I Virshup
scale() can now be used on dense arrays without centering #1160 simonwm
regress_out() now works when some features are constant #1194 simonwm
normalize_total() errored if the passed object was a view #1200 I Virshup
neighbors() sometimes ignored the n_pcs param #1124 V Bergen
ebi_expression_atlas() which contained some out-of-date URLs #1102 I Virshup
ingest() for UMAP 0.4 #1165 S Rybakov
louvain() for Louvain 0.6 #1197 I Virshup
highly_variable_genes() which could lead to incorrect results when the batch_key argument was used #1180 G Eraslan
ingest() where an inconsistent number of neighbors was used #1111 S Rybakov
(v1.5.0)=
2020-05-15The 1.5.0 release adds a lot of new functionality, much of which takes advantage of {mod}anndata updates 0.7.0 - 0.7.2. Highlights of this release include support for spatial data, dedicated handling of graphs in AnnData, sparse PCA, an interface with scvi, and others.
G Palla~scanpy.read_visium read 10x Visium data {pr}1034 {smaller}G Palla, P Angerer, I Virshup~scanpy.datasets.visium_sge load Visium data directly from 10x Genomics {pr}1013 {smaller}M Mirkazemi, G Palla, P Angerer~scanpy.pl.spatial plot spatial data {pr}1012 {smaller}G Palla, P Angerer~scanpy.pp.neighbors and {func}~scanpy.tl.umap, now store cell-by-cell graphs in {attr}~anndata.AnnData.obsp {pr}1118 {smaller}S Rybakov~scanpy.pp.scale and {func}~scanpy.pp.log1p can be used on any element in {attr}~anndata.AnnData.layers or {attr}~anndata.AnnData.obsm {pr}1173 {smaller}I Virshupscanpy.external.pp.scvi for preprocessing with scVI {pr}1085 {smaller}G XingScanpy in R {pr}1186 {smaller}L Zappia~scanpy.pp.pca now uses efficient implicit centering for sparse matrices. This can lead to signifigantly improved performance for large datasets {pr}1066 {smaller}A Tarashansky~scanpy.tl.score_genes now has an efficient implementation for sparse matrices with missing values {pr}1196 {smaller}redst4r.The new {func}`~scanpy.pp.pca` implementation can result in slightly different results for sparse matrices. See the pr ({pr}`1066`) and documentation for more info.
~scanpy.pl.stacked_violin can now be used as a subplot {pr}1084 {smaller}P Angerer~scanpy.tl.score_genes has improved logging {pr}1119 {smaller}G Eraslan~scanpy.pp.scale now saves mean and standard deviation in the {attr}~anndata.AnnData.var {pr}1173 {smaller}A Wolf~scanpy.external.tl.harmony_timeseries {pr}1091 {smaller}A Mousa~scanpy.pp.combat now works when obs_names aren't unique. {pr}1215 {smaller}I Virshup~scanpy.pp.scale can now be used on dense arrays without centering {pr}1160 {smaller}simonwm~scanpy.pp.regress_out now works when some features are constant {pr}1194 {smaller}simonwm~scanpy.pp.normalize_total errored if the passed object was a view {pr}1200 {smaller}I Virshup~scanpy.pp.neighbors sometimes ignored the n_pcs param {pr}1124 {smaller}V Bergen~scanpy.datasets.ebi_expression_atlas which contained some out-of-date URLs {pr}1102 {smaller}I Virshup~scanpy.tl.ingest for UMAP 0.4 {pr}1165 {smaller}S Rybakov~scanpy.tl.louvain for Louvain 0.6 {pr}1197 {smaller}I Virshup~scanpy.pp.highly_variable_genes which could lead to incorrect results when the batch_key argument was used {pr}1180 {smaller}G Eraslan~scanpy.tl.ingest where an inconsistent number of neighbors was used {pr}1111 {smaller}S RybakovNothing published for this version
- sam() self-assembling manifolds [ Tarashansky et al. , 2019 ] #903 A Tarashansky
sam() self-assembling manifolds [ Tarashansky et al. , 2019 ] #903 A Tarashansky
harmony_timeseries() for trajectory inference on discrete time points #994 A Mousa
wishbone() for trajectory inference (bifurcations) #1063 A Mousa
violin now reads .uns['colors_...'] #1029 michalk8
adapt ingest() for UMAP 0.4 #1038 #1106 S Rybakov
compat with matplotlib 3.1 and 3.2 #1090 I Virshup, P Angerer
fix PAGA for new igraph #1037 P Angerer
fix rapids compat of louvain #1079 LouisFaure
(v1.4.6)=
2020-03-17external~scanpy.external.tl.sam self-assembling manifolds {cite:p}Tarashansky2019 {pr}903 {smaller}A Tarashansky~scanpy.external.tl.harmony_timeseries for trajectory inference on discrete time points {pr}994 {smaller}A Mousa~scanpy.external.tl.wishbone for trajectory inference (bifurcations) {pr}1063 {smaller}A Mousa~scanpy.pl.violin now reads .uns['colors_...'] {pr}1029 {smaller}michalk8~scanpy.tl.ingest for UMAP 0.4 {pr}1038 {pr}1106 {smaller}S Rybakov1090 {smaller}I Virshup, P Angerer1037 {smaller}P Angerer1079 {smaller}LouisFaureNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Please install scanpy==1.4.5.post3 instead of scanpy==1.4.5 .
Please install scanpy==1.4.5.post3 instead of scanpy==1.4.5 .
ingest() maps labels and embeddings of reference data to new data Integrating data using ingest and BBKNN #651 S Rybakov, A Wolf
queries recieved many updates including enrichment through gprofiler and more advanced biomart queries #467 I Virshup
set_figure_params() allows setting figsize and accepts facecolor='white' , useful for working in dark mode A Wolf
downsample_counts now always preserves the dtype of it’s input, instead of converting floats to ints #865 I Virshup
allow specifying a base for log1p() #931 G Eraslan
run neighbors on a GPU using rapids #830 T White
param docs from typed params P Angerer
embedding_density() now only takes one positional argument; similar for embedding_density() , which gains a param groupby #965 A Wolf
webpage overhaul, ecosystem page, release notes, tutorials overhaul #960 #966 A Wolf
Warning
changed default solver in pca() from auto to arpack
changed default use_raw in score_genes() from False to None
(v1.4.5)=
2019-12-30Please install scanpy==1.4.5.post3 instead of scanpy==1.4.5.
~scanpy.tl.ingest maps labels and embeddings of reference data to new data {doc}/tutorials/basics/integrating-data-using-ingest {pr}651 {smaller}S Rybakov, A Wolf~scanpy.queries recieved many updates including enrichment through gprofiler and more advanced biomart queries {pr}467 {smaller}I Virshup~scanpy.set_figure_params allows setting figsize and accepts facecolor='white', useful for working in dark mode {smaller}A Wolf~scanpy.pp.downsample_counts now always preserves the dtype of it's input, instead of converting floats to ints {pr}865 {smaller}I Virshup~scanpy.pp.log1p {pr}931 {smaller}G Eraslan830 {smaller}T WhiteP Angerer~scanpy.tl.embedding_density now only takes one positional argument; similar for {func}~scanpy.pl.embedding_density, which gains a param groupby {pr}965 {smaller}A Wolf960 {pr}966 {smaller}A Wolf- changed default `solver` in {func}`~scanpy.pp.pca` from `auto` to `arpack`
- changed default `use_raw` in {func}`~scanpy.tl.score_genes` from `False` to `None`
Nothing published for this version
- Stopped deprecations warnings from AnnData 0.6.22 I Virshup
scanpy.get adds helper functions for extracting data in convenient formats #619 I Virshup
Stopped deprecations warnings from AnnData 0.6.22 I Virshup
normalize_total() gains param exclude_highly_expressed , and fraction is renamed to max_fraction with better docs A Wolf
(v1.4.4)=
2019-07-20scanpy.get adds helper functions for extracting data in convenient formats {pr}619 {smaller}I Virshup0.6.22 {smaller}I Virshup~scanpy.pp.normalize_total gains param exclude_highly_expressed, and fraction is renamed to max_fraction with better docs {smaller}A Wolf- neighbors() correctly infers n_neighbors again from params , which was temporarily broken in v1.4.2 I Virshup
neighbors() correctly infers n_neighbors again from params , which was temporarily broken in v1.4.2 I Virshup
calculate_qc_metrics() is single threaded by default for datasets under 300,000 cells – allowing cached compilation #615 I Virshup
(v1.4.3)=
2019-05-14~scanpy.pp.neighbors correctly infers n_neighbors again from params, which was temporarily broken in v1.4.2 {smaller}I Virshup~scanpy.pp.calculate_qc_metrics is single threaded by default for datasets under 300,000 cells -- allowing cached compilation {pr}615 {smaller}I Virshup- combat() supports additional covariates which may include adjustment variables or biological condition #618 G Eraslan
combat() supports additional covariates which may include adjustment variables or biological condition #618 G Eraslan
highly_variable_genes() has a batch_key option which performs HVG selection in each batch separately to avoid selecting genes that vary strongly across batches #622 G Eraslan
rank_genes_groups() t-test implementation doesn’t return NaN when variance is 0, also changed to scipy’s implementation #621 I Virshup
umap() with init_pos='paga' detects correct dtype A Wolf
louvain() and leiden() auto-generate key_added=louvain_R upon passing restrict_to , which was temporarily changed in 1.4.1 A Wolf
neighbors() and umap() got rid of UMAP legacy code and introduced UMAP as a dependency #576 S Rybakov
(v1.4.2)=
2019-05-06~scanpy.pp.combat supports additional covariates which may include adjustment variables or biological condition {pr}618 {smaller}G Eraslan~scanpy.pp.highly_variable_genes has a batch_key option which performs HVG selection in each batch separately to avoid selecting genes that vary strongly across batches {pr}622 {smaller}G Eraslan~scanpy.tl.rank_genes_groups t-test implementation doesn't return NaN when variance is 0, also changed to scipy's implementation {pr}621 {smaller}I Virshup~scanpy.tl.umap with init_pos='paga' detects correct dtype {smaller}A Wolf~scanpy.tl.louvain and {func}~scanpy.tl.leiden auto-generate key_added=louvain_R upon passing restrict_to, which was temporarily changed in 1.4.1 {smaller}A Wolf~scanpy.pp.neighbors and {func}~scanpy.tl.umap got rid of UMAP legacy code and introduced UMAP as a dependency {pr}576 {smaller}S Rybakov- Scanpy has a command line interface again. Invoking it with scanpy somecommand [args] calls scanpy-somecommand [args] , except for builtin commands
Scanpy has a command line interface again. Invoking it with scanpy somecommand [args] calls scanpy-somecommand [args] , except for builtin commands (currently scanpy settings ) #604 P Angerer
ebi_expression_atlas() allows convenient download of EBI expression atlas I Virshup
marker_gene_overlap() computes overlaps of marker genes M Luecken
filter_rank_genes_groups() filters out genes based on fold change and fraction of cells expressing genes F Ramirez
normalize_total() replaces sc.pp.normalize_per_cell , is more efficient and provides a parameter to only normalize using a fraction of expressed genes S Rybakov
downsample_counts() has been sped up, changed default value of replace parameter to False #474 I Virshup
embedding_density() computes densities on embeddings #543 M Luecken
palantir() interfaces Palantir [ Setty et al. , 2019 ] #493 A Mousa
.layers support of scatter plots F Ramirez
fix double-logarithmization in compute of log fold change in rank_genes_groups() A Muñoz-Rojas
fix return sections of docs P Angerer
(v1.4.1)=
2019-04-26scanpy somecommand [args] calls scanpy-somecommand [args], except for builtin commands (currently scanpy settings) {pr}604 {smaller}P Angerer~scanpy.datasets.ebi_expression_atlas allows convenient download of EBI expression atlas {smaller}I Virshup~scanpy.tl.marker_gene_overlap computes overlaps of marker genes {smaller}M Luecken~scanpy.tl.filter_rank_genes_groups filters out genes based on fold change and fraction of cells expressing genes {smaller}F Ramirez~scanpy.pp.normalize_total replaces sc.pp.normalize_per_cell, is more efficient and provides a parameter to only normalize using a fraction of expressed genes {smaller}S Rybakov~scanpy.pp.downsample_counts has been sped up, changed default value of replace parameter to False {pr}474 {smaller}I Virshup~scanpy.tl.embedding_density computes densities on embeddings {pr}543 {smaller}M Luecken~scanpy.external.tl.palantir interfaces Palantir {cite:p}Setty2019 {pr}493 {smaller}A Mousa.layers support of scatter plots {smaller}F Ramirez~scanpy.tl.rank_genes_groups {smaller}A Muñoz-RojasP AngererNothing published for this version
- various documentation and dev process improvements
various documentation and dev process improvements
Added combat() function for batch effect correction [ Johnson et al. , 2006 , Leek et al. , 2017 , Pedersen, 2012 ] #398 M Lange
(v1.3.8)=
2019-02-05~scanpy.pp.combat function for batch effect correction {cite:p}Johnson2006,Leek2012,Pedersen2012 {pr}398 {smaller}M Lange- API changed from import scanpy as sc to import scanpy.api as sc .
API changed from import scanpy as sc to import scanpy.api as sc .
phenograph() wraps the graph clustering package Phenograph [ Levine et al. , 2015 ] thanks to A Mousa
(v1.3.7)=
2019-01-02import scanpy as sc to import scanpy.api as sc.~scanpy.external.tl.phenograph wraps the graph clustering package Phenograph {cite:p}Levine2015 {smaller}thanks to A Mousa- a new plotting gallery for visualizing-marker-genes F Ramirez
a new plotting gallery for visualizing-marker-genes F Ramirez
tutorials are integrated on ReadTheDocs, pbmc3k and paga-paul15 A Wolf
CZI’s cellxgene directly reads .h5ad files the cellxgene developers
the UCSC Single Cell Browser requires exporting via cellbrowser() M Haeussler
highly_variable_genes() supersedes sc.pp.filter_genes_dispersion , it gives the same results but, by default, expects logarithmized data and doesn’t subset A Wolf
(v1.3.6)=
2018-12-11visualizing-marker-genes {smaller}F Ramirezpbmc3k and paga-paul15 {smaller}A Wolf.h5ad files {smaller}the cellxgene developers~scanpy.external.exporting.cellbrowser {smaller}M Haeussler~scanpy.pp.highly_variable_genes supersedes sc.pp.filter_genes_dispersion, it gives the same results but, by default, expects logarithmized data and doesn’t subset {smaller}A Wolf- uncountable figure improvements #369 F Ramirez
uncountable figure improvements #369 F Ramirez
(v1.3.5)=
2018-12-09369 {smaller}F RamirezYour coding agent can read these notes before it upgrades. Set up the MCP server →