|
1 | 1 | import dask.array as da |
2 | 2 | import matplotlib |
| 3 | +import matplotlib.pyplot as plt |
| 4 | +import numpy as np |
3 | 5 | import scanpy as sc |
4 | 6 | from matplotlib.colors import Normalize |
5 | 7 | from spatial_image import to_spatial_image |
6 | 8 | from spatialdata import SpatialData |
| 9 | +from spatialdata.models import Image2DModel |
7 | 10 |
|
8 | 11 | import spatialdata_plot # noqa: F401 |
9 | 12 | from tests.conftest import DPI, PlotTester, PlotTesterMeta, _viridis_with_under_over |
@@ -130,3 +133,17 @@ def test_plot_can_stick_to_zorder(self, sdata_blobs: SpatialData): |
130 | 133 |
|
131 | 134 | def test_plot_can_render_multiscale_image_with_custom_cmap(self, sdata_blobs: SpatialData): |
132 | 135 | sdata_blobs.pl.render_images("blobs_multiscale_image", channel=0, scale="scale2", cmap="Greys").pl.show() |
| 136 | + |
| 137 | + def test_plot_correctly_normalizes_multichannel_images(self, sdata_raccoon: SpatialData): |
| 138 | + sdata_raccoon["raccoon_int16"] = Image2DModel.parse( |
| 139 | + sdata_raccoon["raccoon"].data.astype(np.uint16) * 257, # 255 * 257 = 65535, |
| 140 | + dims=("c", "y", "x"), |
| 141 | + ) |
| 142 | + |
| 143 | + # show multi-channel vs single-channel |
| 144 | + fig, axs = plt.subplots(nrows=1, ncols=2) |
| 145 | + sdata_raccoon.pl.render_images("raccoon_int16", channel=[0]).pl.show(ax=axs[0], colorbar=False) |
| 146 | + axs[0].set_title("single-channel uint16") |
| 147 | + sdata_raccoon.pl.render_images("raccoon_int16", channel=[0, 1], palette=["yellow", "red"]).pl.show(ax=axs[1]) |
| 148 | + axs[1].set_title("two-channel uint16") |
| 149 | + fig.tight_layout() |
0 commit comments