scverse / scverse/scanpy

seaborn is broken with pandas 3: Violin plots squished, points misaligned

Open
#3,991 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Area - Plotting 🌺 Upstream
Dominant language
Python
Stars
2.6k
Forks
779
Avg merge
1d 4h
Merged PRs (30d)
27

Description

Please make sure these conditions are met
  • I have checked that this issue has not already been reported.
  • I have confirmed this bug exists on the latest version of scanpy.
  • (optional) I have confirmed this bug exists on the main branch of scanpy.
What happened?

Hi, I'd appreciate any ideas about an issue with violins being squished and points not lining up. This started after a recent update of my mamba/conda environment but worked fine before. I tried searching for similar issues here and also on Seaborn's page but don't have any leads and can't say I'm well-versed with plotting in Python yet.

Thanks!

Image
Minimal code sample
# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "scanpy@git+https://github.com/scverse/scanpy.git@main",
#   "anndata==0.12.6"
# ]
# ///
#
# This script automatically imports the development branch of scanpy to check for issues

import scanpy as sc
import anndata as ad

adata = sc.datasets.pbmc68k_reduced()
sc.pl.violin(adata, ["n_genes", "n_counts", "percent_mito", "S_score"], groupby="bulk_labels", rotation=90)
Error output

Versions
scanpy	1.12
anndata	0.12.6
----	----
ipykernel	6.29.5
cloudpickle	3.1.2
natsort	8.4.0
matplotlib	3.10.8
session-info2	0.4
colorama	0.4.6
PyQtWebEngine	5.15.7
psutil	7.2.2
ipywidgets	8.1.8
sphinxcontrib-applehelp	2.0.0
executing	2.2.1
pyzmq	27.1.0
beautifulsoup4	4.14.3
stack_data	0.6.3
scikit-learn	1.8.0
PyYAML	6.0.3
sphinxcontrib-serializinghtml	1.1.10
six	1.17.0
prompt_toolkit	3.0.52
joblib	1.5.3
platformdirs	4.9.2
numba	0.63.1
debugpy	1.8.20
seaborn	0.13.2
sphinxcontrib-qthelp	2.0.0
typing_extensions	4.15.0
packaging	26.0
pyxdg	0.28
spyder-kernels	3.1.3
jupyter_client	7.4.9
setuptools	82.0.0
donfig	0.8.1.post1
scipy	1.17.0
decorator	5.2.1
jedi	0.19.2
matplotlib-inline	0.2.1
numcodecs	0.16.5
legacy-api-wrap	1.5
PyQt5_sip	12.17.0
entrypoints	0.4
comm	0.2.3
asttokens	3.0.1
zarr	3.1.5
threadpoolctl	3.6.0
pillow	12.1.1
parso	0.8.6
statsmodels	0.14.6
ipython	9.10.0
google-crc32c	1.8.0
numpy	2.3.5
pytz	2025.2
defusedxml	0.7.1
pandas	3.0.1
sphinxcontrib-devhelp	2.0.0
kiwisolver	1.4.9
PyQt5	5.15.11
h5py	3.13.0
patsy	1.0.2
msgpack	1.1.2
traitlets	5.14.3
jupyter_core	5.9.1
tornado	6.5.4
charset-normalizer	3.4.4
sphinxcontrib-jsmath	1.0.1
astroid	4.0.4
pyparsing	3.3.2
python-dateutil	2.9.0.post0
lxml	6.0.2
Pygments	2.19.2
pure_eval	0.2.3
llvmlite	0.46.0
cycler	0.12.1
soupsieve	2.8.3
wcwidth	0.6.0
fast-array-utils	1.3.1
sphinxcontrib-htmlhelp	2.1.0
chardet	5.2.0
----	----
Python	3.12.12 | packaged by conda-forge | (main, Jan 26 2026, 23:51:32) [GCC 14.3.0]
OS	Linux-6.12.74-1-lts-x86_64-with-glibc2.43
CPU	32 logical CPU cores
GPU	ID: 0, NVIDIA GeForce RTX 4070 Laptop GPU, Driver: 590.48.01, Memory: 8188 MiB
Updated	2026-02-26 19:08

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the sc.pl.violin call in the minimal script and inspect Scanpy's violin-plot implementation and its pandas, seaborn, and matplotlib interactions. Reproduce the example with the listed versions, then add or update a regression test showing that violin widths and point positions remain aligned under pandas 3.

Written by the indexing model from the issue text.

Assessment

Tech stack
matplotlib, pandas, python
Domain
data-visualization
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.