Skip to content

render_points() renders outlined circles for small point sizes #756

Description

@MeyerBender

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)
Image
# this produces outlined points
sdata.pl.render_points("blobs_points", color="genes", size=0.1).pl.show(dpi=300)
Image

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.

Image

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                                         |

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions