seaborn is broken with pandas 3: Violin plots squished, points misaligned
Nobody has claimed this yet.
- 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!
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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