@@ -375,15 +375,6 @@ <h2>Loading the dataset<a class="headerlink" href="#loading-the-dataset" title="
375375< p > We’ll use the < code class ="docutils literal notranslate "> < span class ="pre "> squidpy.datasets.visium_hne_sdata()</ span > </ code > test data to demonstrate the function. The < code class ="docutils literal notranslate "> < span class ="pre "> SpatialData</ span > </ code > object contains a multi-resolution H&E image (< code class ="docutils literal notranslate "> < span class ="pre "> 'hne'</ span > </ code > ) and the spot polygons (< code class ="docutils literal notranslate "> < span class ="pre "> 'spots'</ span > </ code > ), both aligned in the < code class ="docutils literal notranslate "> < span class ="pre "> 'global'</ span > </ code > coordinate system.</ p >
376376< div class ="cell docutils container ">
377377< div class ="cell_input docutils container ">
378- < div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="w "> </ span > < span class ="nn "> warnings</ span >
379-
380- < span class ="n "> warnings</ span > < span class ="o "> .</ span > < span class ="n "> filterwarnings</ span > < span class ="p "> (</ span > < span class ="s2 "> "ignore"</ span > < span class ="p "> )</ span >
381- </ pre > </ div >
382- </ div >
383- </ div >
384- </ div >
385- < div class ="cell docutils container ">
386- < div class ="cell_input docutils container ">
387378< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="w "> </ span > < span class ="nn "> squidpy</ span > < span class ="w "> </ span > < span class ="k "> as</ span > < span class ="w "> </ span > < span class ="nn "> sq</ span >
388379< span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> shapely.geometry</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> Polygon</ span >
389380
@@ -401,7 +392,7 @@ <h2>Loading the dataset<a class="headerlink" href="#loading-the-dataset" title="
401392< div class ="output stream highlight-myst-ansi notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class =" -Color -Color-Blue "> INFO </ span > Loading existing dataset from data/spatialdata/visium_hne_sdata.zarr
402393</ pre > </ div >
403394</ div >
404- < div class ="output text_plain highlight-myst-ansi notranslate "> < div class ="highlight "> < pre > < span > </ span > SpatialData object, with associated Zarr store: /ictstr01/groups/ml01/workspace/ttreis/projects /spatialdata-plot-notebooks/examples/data/spatialdata/visium_hne_sdata.zarr
395+ < div class ="output text_plain highlight-myst-ansi notranslate "> < div class ="highlight "> < pre > < span > </ span > SpatialData object, with associated Zarr store: /Users/tim.treis/Documents/GitHub /spatialdata-plot-notebooks/examples/data/spatialdata/visium_hne_sdata.zarr
405396├── Images
406397│ └── 'hne': DataTree[cyx] (3, 11757, 11291), (3, 5878, 5645), (3, 2939, 2822), (3, 1469, 1411)
407398├── Shapes
@@ -426,7 +417,7 @@ <h2>Inspect what we’ll annotate<a class="headerlink" href="#inspect-what-we-ll
426417</ div >
427418</ div >
428419< div class ="cell_output docutils container ">
429- < img alt ="../../_images/4235a1239194a3724d9d5adc9b5d47805bde17337fb28d69e4b0cf4ba8456b79 .png " src ="../../_images/4235a1239194a3724d9d5adc9b5d47805bde17337fb28d69e4b0cf4ba8456b79 .png " />
420+ < img alt ="../../_images/960d95b932194b3a636ffd047046c7e674ce3e580273a365100c9e7197332b66 .png " src ="../../_images/960d95b932194b3a636ffd047046c7e674ce3e580273a365100c9e7197332b66 .png " />
430421</ div >
431422</ div >
432423</ section >
@@ -446,34 +437,49 @@ <h2>Launching the widget<a class="headerlink" href="#launching-the-widget" title
446437< p > < strong > Drawing tools</ strong > : rectangle, polygon, point. Points are stored as small circle polygons (radius scaled to the rendered image’s CS extent) so the resulting < code class ="docutils literal notranslate "> < span class ="pre "> ShapesModel</ span > </ code > is uniform-type.</ p >
447438< p > When you click < strong > Save</ strong > the shapes on the canvas are committed to < code class ="docutils literal notranslate "> < span class ="pre "> sdata.shapes[<name>]</ span > </ code > as a single < code class ="docutils literal notranslate "> < span class ="pre "> ShapesModel</ span > </ code > (multiple rows if you drew multiple shapes). Same-name commits overwrite. Use < code class ="docutils literal notranslate "> < span class ="pre "> sdata.write_element(<name>)</ span > </ code > after the cell to persist to a backing zarr.</ p >
448439< p > < img alt ="Drawing a region with sdata.pl.annotate " src ="../../_images/interactive_annotate.gif " /> </ p >
449- < p > < em > Live recording of the widget. Replace this file with your own capture before publishing the tutorial. </ em > </ p >
440+ < p > < em > Live recording of the widget.</ em > </ p >
450441</ section >
451442< section id ="what-the-widget-produces ">
452443< h2 > What the widget produces< a class ="headerlink " href ="#what-the-widget-produces " title ="Link to this heading "> #</ a > </ h2 >
453444< p > To keep the rest of this notebook reproducible without a live kernel, the next cell manually creates a similar < code class ="docutils literal notranslate "> < span class ="pre "> ShapesModel</ span > </ code > the widget would have written if you’d drawn a polygon around the hippocampus and clicked Save with the name < code class ="docutils literal notranslate "> < span class ="pre "> 'tumor_region'</ span > </ code > . After this cell, downstream code is identical regardless of whether you ran the widget or this simulated commit.</ p >
454445< div class ="cell docutils container ">
455446< div class ="cell_input docutils container ">
456447< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="c1 "> # Pretend the user drew this polygon in the widget and clicked Save with</ span >
457- < span class ="c1 "> # name="tumor_region ". Coordinates are in the 'global' coordinate system</ span >
448+ < span class ="c1 "> # name="poly ". Coordinates are in the 'global' coordinate system</ span >
458449< span class ="c1 "> # of the visium_hne_sdata dataset.</ span >
459450< span class ="n "> hippocampus_polygon</ span > < span class ="o "> =</ span > < span class ="n "> Polygon</ span > < span class ="p "> (</ span >
460451 < span class ="p "> [</ span >
461- < span class ="p "> (</ span > < span class ="mi "> 3200</ span > < span class ="p "> ,</ span > < span class ="mi "> 4800</ span > < span class ="p "> ),</ span >
462- < span class ="p "> (</ span > < span class ="mi "> 4800</ span > < span class ="p "> ,</ span > < span class ="mi "> 4400</ span > < span class ="p "> ),</ span >
463- < span class ="p "> (</ span > < span class ="mi "> 5600</ span > < span class ="p "> ,</ span > < span class ="mi "> 5200</ span > < span class ="p "> ),</ span >
464- < span class ="p "> (</ span > < span class ="mi "> 5400</ span > < span class ="p "> ,</ span > < span class ="mi "> 6400</ span > < span class ="p "> ),</ span >
465- < span class ="p "> (</ span > < span class ="mi "> 4200</ span > < span class ="p "> ,</ span > < span class ="mi "> 6600</ span > < span class ="p "> ),</ span >
466- < span class ="p "> (</ span > < span class ="mi "> 3200</ span > < span class ="p "> ,</ span > < span class ="mi "> 6000</ span > < span class ="p "> ),</ span >
452+ < span class ="p "> (</ span > < span class ="mi "> 2540</ span > < span class ="p "> ,</ span > < span class ="mi "> 3946</ span > < span class ="p "> ),</ span >
453+ < span class ="p "> (</ span > < span class ="mi "> 3105</ span > < span class ="p "> ,</ span > < span class ="mi "> 3597</ span > < span class ="p "> ),</ span >
454+ < span class ="p "> (</ span > < span class ="mi "> 3387</ span > < span class ="p "> ,</ span > < span class ="mi "> 3149</ span > < span class ="p "> ),</ span >
455+ < span class ="p "> (</ span > < span class ="mi "> 3750</ span > < span class ="p "> ,</ span > < span class ="mi "> 2953</ span > < span class ="p "> ),</ span >
456+ < span class ="p "> (</ span > < span class ="mi "> 4449</ span > < span class ="p "> ,</ span > < span class ="mi "> 2939</ span > < span class ="p "> ),</ span >
457+ < span class ="p "> (</ span > < span class ="mi "> 5054</ span > < span class ="p "> ,</ span > < span class ="mi "> 3065</ span > < span class ="p "> ),</ span >
458+ < span class ="p "> (</ span > < span class ="mi "> 5511</ span > < span class ="p "> ,</ span > < span class ="mi "> 3317</ span > < span class ="p "> ),</ span >
459+ < span class ="p "> (</ span > < span class ="mi "> 6008</ span > < span class ="p "> ,</ span > < span class ="mi "> 3835</ span > < span class ="p "> ),</ span >
460+ < span class ="p "> (</ span > < span class ="mi "> 6223</ span > < span class ="p "> ,</ span > < span class ="mi "> 4198</ span > < span class ="p "> ),</ span >
461+ < span class ="p "> (</ span > < span class ="mi "> 6398</ span > < span class ="p "> ,</ span > < span class ="mi "> 4688</ span > < span class ="p "> ),</ span >
462+ < span class ="p "> (</ span > < span class ="mi "> 6344</ span > < span class ="p "> ,</ span > < span class ="mi "> 5052</ span > < span class ="p "> ),</ span >
463+ < span class ="p "> (</ span > < span class ="mi "> 6115</ span > < span class ="p "> ,</ span > < span class ="mi "> 5346</ span > < span class ="p "> ),</ span >
464+ < span class ="p "> (</ span > < span class ="mi "> 5712</ span > < span class ="p "> ,</ span > < span class ="mi "> 5304</ span > < span class ="p "> ),</ span >
465+ < span class ="p "> (</ span > < span class ="mi "> 5242</ span > < span class ="p "> ,</ span > < span class ="mi "> 4926</ span > < span class ="p "> ),</ span >
466+ < span class ="p "> (</ span > < span class ="mi "> 4919</ span > < span class ="p "> ,</ span > < span class ="mi "> 4688</ span > < span class ="p "> ),</ span >
467+ < span class ="p "> (</ span > < span class ="mi "> 4449</ span > < span class ="p "> ,</ span > < span class ="mi "> 4534</ span > < span class ="p "> ),</ span >
468+ < span class ="p "> (</ span > < span class ="mi "> 3777</ span > < span class ="p "> ,</ span > < span class ="mi "> 4548</ span > < span class ="p "> ),</ span >
469+ < span class ="p "> (</ span > < span class ="mi "> 3333</ span > < span class ="p "> ,</ span > < span class ="mi "> 4548</ span > < span class ="p "> ),</ span >
470+ < span class ="p "> (</ span > < span class ="mi "> 2876</ span > < span class ="p "> ,</ span > < span class ="mi "> 4520</ span > < span class ="p "> ),</ span >
471+ < span class ="p "> (</ span > < span class ="mi "> 2540</ span > < span class ="p "> ,</ span > < span class ="mi "> 4478</ span > < span class ="p "> ),</ span >
472+ < span class ="p "> (</ span > < span class ="mi "> 2540</ span > < span class ="p "> ,</ span > < span class ="mi "> 3946</ span > < span class ="p "> )</ span >
467473 < span class ="p "> ]</ span >
468474< span class ="p "> )</ span >
469475
470476< span class ="kn "> import</ span > < span class ="w "> </ span > < span class ="nn "> geopandas</ span > < span class ="w "> </ span > < span class ="k "> as</ span > < span class ="w "> </ span > < span class ="nn "> gpd</ span >
471477
472- < span class ="n "> sdata</ span > < span class ="o "> .</ span > < span class ="n "> shapes</ span > < span class ="p "> [</ span > < span class ="s2 "> "tumor_region "</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> ShapesModel</ span > < span class ="o "> .</ span > < span class ="n "> parse</ span > < span class ="p "> (</ span >
478+ < span class ="n "> sdata</ span > < span class ="o "> .</ span > < span class ="n "> shapes</ span > < span class ="p "> [</ span > < span class ="s2 "> "poly "</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> ShapesModel</ span > < span class ="o "> .</ span > < span class ="n "> parse</ span > < span class ="p "> (</ span >
473479 < span class ="n "> gpd</ span > < span class ="o "> .</ span > < span class ="n "> GeoDataFrame</ span > < span class ="p "> ({</ span > < span class ="s2 "> "geometry"</ span > < span class ="p "> :</ span > < span class ="p "> [</ span > < span class ="n "> hippocampus_polygon</ span > < span class ="p "> ]}),</ span >
474480 < span class ="n "> transformations</ span > < span class ="o "> =</ span > < span class ="p "> {</ span > < span class ="s2 "> "global"</ span > < span class ="p "> :</ span > < span class ="n "> Identity</ span > < span class ="p "> ()},</ span >
475481< span class ="p "> )</ span >
476- < span class ="n "> sdata</ span > < span class ="o "> .</ span > < span class ="n "> shapes</ span > < span class ="p "> [</ span > < span class ="s2 "> "tumor_region "</ span > < span class ="p "> ]</ span >
482+ < span class ="n "> sdata</ span > < span class ="o "> .</ span > < span class ="n "> shapes</ span > < span class ="p "> [</ span > < span class ="s2 "> "poly "</ span > < span class ="p "> ]</ span >
477483</ pre > </ div >
478484</ div >
479485</ div >
@@ -502,7 +508,7 @@ <h2>What the widget produces<a class="headerlink" href="#what-the-widget-produce
502508 < tbody >
503509 < tr >
504510 < th > 0</ th >
505- < td > POLYGON ((3200 4800, 4800 4400, 5600 5200, 540 ...</ td >
511+ < td > POLYGON ((2540 3946, 3105 3597, 3387 3149, 375 ...</ td >
506512 </ tr >
507513 </ tbody >
508514</ table >
@@ -517,14 +523,14 @@ <h2>Working with the saved region<a class="headerlink" href="#working-with-the-s
517523< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="p "> (</ span >
518524 < span class ="n "> sdata</ span >
519525 < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_images</ span > < span class ="p "> (</ span > < span class ="s2 "> "hne"</ span > < span class ="p "> )</ span >
520- < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_shapes</ span > < span class ="p "> (</ span > < span class ="s2 "> "tumor_region "</ span > < span class ="p "> ,</ span > < span class ="n "> outline_color</ span > < span class ="o "> =</ span > < span class ="s2 "> "#22d3ee "</ span > < span class ="p "> ,</ span > < span class ="n "> fill_alpha</ span > < span class ="o "> =</ span > < span class ="mf "> 0.2</ span > < span class ="p "> )</ span >
526+ < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_shapes</ span > < span class ="p "> (</ span > < span class ="s2 "> "poly "</ span > < span class ="p "> ,</ span > < span class ="n "> outline_color</ span > < span class ="o "> =</ span > < span class ="s2 "> "red "</ span > < span class ="p "> ,</ span > < span class ="n "> fill_alpha</ span > < span class ="o "> =</ span > < span class ="mf "> 0.2</ span > < span class ="p "> )</ span >
521527 < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> show</ span > < span class ="p "> ()</ span >
522528< span class ="p "> )</ span >
523529</ pre > </ div >
524530</ div >
525531</ div >
526532< div class ="cell_output docutils container ">
527- < img alt ="../../_images/f04e71eed81e649b12a86507f9bd2c10d346d6b8353100890ec7f1ee64e506b3 .png " src ="../../_images/f04e71eed81e649b12a86507f9bd2c10d346d6b8353100890ec7f1ee64e506b3 .png " />
533+ < img alt ="../../_images/a63c16dec8933d4e969ad920dc6d6f2dcbe29476f2e11a7ec646e0829e84726c .png " src ="../../_images/a63c16dec8933d4e969ad920dc6d6f2dcbe29476f2e11a7ec646e0829e84726c .png " />
528534</ div >
529535</ div >
530536</ section >
@@ -535,7 +541,7 @@ <h2>Cropping the dataset to the region<a class="headerlink" href="#cropping-the-
535541< div class ="cell_input docutils container ">
536542< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="n "> subset</ span > < span class ="o "> =</ span > < span class ="n "> sd</ span > < span class ="o "> .</ span > < span class ="n "> polygon_query</ span > < span class ="p "> (</ span >
537543 < span class ="n "> sdata</ span > < span class ="p "> ,</ span >
538- < span class ="n "> sdata</ span > < span class ="p "> [</ span > < span class ="s2 "> "tumor_region "</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> geometry</ span > < span class ="o "> .</ span > < span class ="n "> iloc</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ],</ span >
544+ < span class ="n "> sdata</ span > < span class ="p "> [</ span > < span class ="s2 "> "poly "</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> geometry</ span > < span class ="o "> .</ span > < span class ="n "> iloc</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ],</ span >
539545 < span class ="n "> target_coordinate_system</ span > < span class ="o "> =</ span > < span class ="s2 "> "global"</ span > < span class ="p "> ,</ span >
540546< span class ="p "> )</ span >
541547< span class ="n "> subset</ span >
@@ -545,15 +551,15 @@ <h2>Cropping the dataset to the region<a class="headerlink" href="#cropping-the-
545551< div class ="cell_output docutils container ">
546552< div class ="output text_plain highlight-myst-ansi notranslate "> < div class ="highlight "> < pre > < span > </ span > SpatialData object
547553├── Images
548- │ └── 'hne': DataTree[cyx] (3, 2200, 2400 ), (3, 1100, 1200 ), (3, 550, 600 ), (3, 275, 300 )
554+ │ └── 'hne': DataTree[cyx] (3, 2407, 3858 ), (3, 1204, 1929 ), (3, 601, 964 ), (3, 301, 483 )
549555├── Shapes
550- │ ├── 'spots ': GeoDataFrame shape: (261, 2 ) (2D shapes)
551- │ └── 'tumor_region ': GeoDataFrame shape: (1, 1 ) (2D shapes)
556+ │ ├── 'poly ': GeoDataFrame shape: (1, 1 ) (2D shapes)
557+ │ └── 'spots ': GeoDataFrame shape: (351, 2 ) (2D shapes)
552558└── Tables
553- └── 'adata': AnnData (261 , 18078)
559+ └── 'adata': AnnData (351 , 18078)
554560with coordinate systems:
555561 ▸ 'global', with elements:
556- hne (Images), spots (Shapes), tumor_region (Shapes)
562+ hne (Images), poly (Shapes), spots (Shapes)
557563</ pre > </ div >
558564</ div >
559565</ div >
@@ -563,14 +569,14 @@ <h2>Cropping the dataset to the region<a class="headerlink" href="#cropping-the-
563569< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="p "> (</ span >
564570 < span class ="n "> subset</ span >
565571 < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_images</ span > < span class ="p "> (</ span > < span class ="s2 "> "hne"</ span > < span class ="p "> )</ span >
566- < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_shapes</ span > < span class ="p "> (</ span > < span class ="s2 "> "spots"</ span > < span class ="p "> ,</ span > < span class ="n "> fill_alpha </ span > < span class ="o "> =</ span > < span class ="mf " > 0.4 </ span > < span class ="p "> )</ span >
572+ < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> render_shapes</ span > < span class ="p "> (</ span > < span class ="s2 "> "spots"</ span > < span class ="p "> ,</ span > < span class ="n "> color </ span > < span class ="o "> =</ span > < span class ="s2 " > "total_counts" </ span > < span class ="p "> )</ span >
567573 < span class ="o "> .</ span > < span class ="n "> pl</ span > < span class ="o "> .</ span > < span class ="n "> show</ span > < span class ="p "> ()</ span >
568574< span class ="p "> )</ span >
569575</ pre > </ div >
570576</ div >
571577</ div >
572578< div class ="cell_output docutils container ">
573- < img alt ="../../_images/9f905de110bcf5dd0843b2256925b236fc7240dc854bb2d1f98a7224d05d7eaa .png " src ="../../_images/9f905de110bcf5dd0843b2256925b236fc7240dc854bb2d1f98a7224d05d7eaa .png " />
579+ < img alt ="../../_images/48c1e943f14828f26a2bb1c004b15e17cc68134706fb33d55aea03ee365e6f82 .png " src ="../../_images/48c1e943f14828f26a2bb1c004b15e17cc68134706fb33d55aea03ee365e6f82 .png " />
574580</ div >
575581</ div >
576582</ section >
@@ -580,12 +586,36 @@ <h2>For reproducibility<a class="headerlink" href="#for-reproducibility" title="
580586< div class ="cell_input docutils container ">
581587< div class ="highlight-ipython3 notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="c1 "> # ruff: noqa: F401, F811, I001, E402</ span >
582588< span class ="c1 "> # fmt: off</ span >
583- < span class ="kn "> import</ span > < span class ="w "> </ span > < span class ="nn "> spatialdata_plot </ span >
589+ < span class ="kn "> import</ span > < span class ="w "> </ span > < span class ="nn "> anywidget </ span >
584590
585591< span class ="o "> %</ span > < span class ="k "> load_ext</ span > watermark
586592< span class ="c1 "> # fmt: on</ span >
587593
588- < span class ="o "> %</ span > < span class ="k "> watermark</ span > -v -m -p spatialdata,spatialdata_plot,squidpy,matplotlib,numpy
594+ < span class ="o "> %</ span > < span class ="k "> watermark</ span > -v -m -p spatialdata,spatialdata_plot,anywidget,squidpy,matplotlib,numpy
595+ </ pre > </ div >
596+ </ div >
597+ </ div >
598+ < div class ="cell_output docutils container ">
599+ < div class ="output stream highlight-myst-ansi notranslate "> < div class ="highlight "> < pre > < span > </ span > The watermark extension is already loaded. To reload it, use:
600+ %reload_ext watermark
601+ Python implementation: CPython
602+ Python version : 3.14.4
603+ IPython version : 9.13.0
604+
605+ spatialdata : 0.7.3
606+ spatialdata_plot: 0.3.5.dev26+g694ed9238
607+ anywidget : 0.11.0
608+ squidpy : 1.8.1
609+ matplotlib : 3.10.9
610+ numpy : 2.4.4
611+
612+ Compiler : Clang 20.1.8
613+ OS : Darwin
614+ Release : 25.2.0
615+ Machine : arm64
616+ Processor : arm
617+ CPU cores : 8
618+ Architecture: 64bit
589619</ pre > </ div >
590620</ div >
591621</ div >
0 commit comments