Report
When using render_points(method="matplotlib") with a very small point size and high dpi, I get outlined points instead of filled ones. Minimal example below.
import spatialdata as sd
import spatialdata_plot
import matplotlib.pyplot as plt
sdata = sd.datasets.blobs()
# this works as intended
sdata.pl.render_points("blobs_points", color="genes", size=10).pl.show(dpi=300)
# this produces outlined points
sdata.pl.render_points("blobs_points", color="genes", size=0.1).pl.show(dpi=300)
You might need to open this image in fullscreen mode to see it properly. I also see this more pronounced in real data, just figured I'd use the example data to make it easier to reproduce. Here's an example of what it looks like on real data.
Versions
| Package | Version |
| ---------------- | ------- |
| spatialdata | 0.8.0 |
| spatialdata-plot | 0.4.0 |
| matplotlib | 3.10.5 |
| Dependency | Version |
| ----------------------------- | --------------------- |
| scikit-learn | 1.7.1 |
| llvmlite | 0.44.0 |
| click | 8.2.1 |
| threadpoolctl | 3.6.0 |
| numpy | 2.2.6 |
| certifi | 2025.8.3 (2025.08.03) |
| google-crc32c | 1.8.0 |
| pyzmq | 27.0.1 |
| platformdirs | 4.3.8 |
| Pygments | 2.19.2 |
| universal_pathlib | 0.3.8 |
| pydantic | 2.12.5 |
| datashader | 0.18.1 |
| pyproj | 3.7.1 |
| stack-data | 0.6.3 |
| sortedcontainers | 2.4.0 |
| tqdm | 4.67.1 |
| pyct | 0.5.0 |
| idna | 3.10 |
| MarkupSafe | 3.0.2 |
| annotated-types | 0.8.0 |
| pathlib_abc | 0.5.2 |
| scverse-misc | 0.1.3 |
| geopandas | 1.1.1 |
| jaraco.text | 3.12.1 |
| matplotlib-scalebar | 0.9.0 |
| fsspec | 2025.7.0 |
| ipykernel | 7.3.0 |
| spatial_image | 1.2.3 |
| dask-image | 2024.5.3 |
| jaraco.functools | 4.0.1 |
| narwhals | 2.16.0 |
| annsel | 0.1.2 |
| parso | 0.8.4 |
| comm | 0.2.3 |
| attrs | 25.3.0 |
| distributed | 2026.7.1 |
| pytz | 2025.2 |
| executing | 2.2.0 |
| more-itertools | 10.8.0 |
| sphinxcontrib-qthelp | 2.0.0 |
| cycler | 0.12.1 |
| numba | 0.61.2 |
| ome-zarr | 0.18.0 |
| scanpy | 1.12.3 |
| ipython | 9.4.0 |
| xarray-dataclass | 3.0.0 |
| toolz | 1.0.0 |
| sphinxcontrib-devhelp | 2.0.0 |
| matplotlib-inline | 0.1.7 |
| asttokens | 3.0.0 |
| natsort | 8.4.0 |
| multiscale_spatial_image | 2.0.3 |
| typing_extensions | 4.14.1 |
| xarray-spatial | 0.4.0 |
| zict | 3.0.0 |
| zarr | 3.1.5 |
| pandas | 2.3.1 |
| rich | 14.1.0 |
| kiwisolver | 1.4.8 |
| typing-inspection | 0.4.2 |
| charset-normalizer | 3.4.2 |
| session-info2 | 0.2 |
| packaging | 25.0 |
| multipledispatch | 1.0.0 (0.6.0) |
| sphinxcontrib-serializinghtml | 2.0.0 |
| h5py | 3.14.0 |
| requests | 2.32.4 |
| scipy | 1.16.1 |
| tornado | 6.5.1 |
| sphinxcontrib-jsmath | 1.0.1 |
| xarray | 2025.12.0 |
| pooch | 1.8.2 (v1.8.2) |
| debugpy | 1.8.21 |
| psutil | 7.2.2 |
| pure_eval | 0.2.3 |
| pydantic-zarr | 0.10.0 |
| prompt_toolkit | 3.0.51 |
| decorator | 5.2.1 |
| sphinxcontrib-htmlhelp | 2.1.0 |
| pydantic_core | 2.41.5 |
| donfig | 0.8.1.post1 |
| anndata | 0.12.8 |
| msgpack | 1.1.2 |
| defusedxml | 0.7.1 |
| tblib | 3.2.2 |
| urllib3 | 2.5.0 |
| jupyter_client | 8.9.1 |
| dask | 2026.7.1 |
| ome-zarr-models | 1.7 |
| scikit-image | 0.25.2 |
| fast-array-utils | 1.5 |
| coverage | 7.10.2 |
| wrapt | 1.17.2 |
| numcodecs | 0.15.1 |
| setuptools | 80.9.0 |
| sphinxcontrib-applehelp | 2.0.0 |
| shapely | 2.1.1 |
| pillow | 11.3.0 |
| joblib | 1.5.1 |
| locket | 1.0.0 |
| pyarrow | 21.0.0 |
| jedi | 0.19.2 |
| six | 1.17.0 |
| lazy_loader | 0.4 |
| jupyter_core | 5.8.1 |
| python-dateutil | 2.9.0.post0 |
| legacy-api-wrap | 1.5 |
| jaraco.collections | 5.1.0 |
| pyparsing | 3.2.3 |
| cloudpickle | 3.1.1 |
| jaraco.context | 5.3.0 |
| Deprecated | 1.2.18 |
| traitlets | 5.14.3 |
| PyYAML | 6.0.2 |
| param | 2.2.1 |
| wcwidth | 0.2.13 |
| Jinja2 | 3.1.6 |
| Component | Info |
| --------- | -------------------------------------------------------- |
| Python | 3.13.5 (main, Jul 23 2025, 00:37:22) [Clang 20.1.4 ] |
| OS | Linux-5.14.0-687.25.1.el9_8.x86_64-x86_64-with-glibc2.35 |
| Updated | 2026-08-06 09:27 |
Report
When using
render_points(method="matplotlib")with a very small point size and high dpi, I get outlined points instead of filled ones. Minimal example below.You might need to open this image in fullscreen mode to see it properly. I also see this more pronounced in real data, just figured I'd use the example data to make it easier to reproduce. Here's an example of what it looks like on real data.
Versions