Skip to content

Commit f6206dd

Browse files
committed
Preview for PR #5 c1351be
1 parent fa21b03 commit f6206dd

6 files changed

Lines changed: 147 additions & 86 deletions
537 KB
Loading
374 KB
Loading
373 KB
Loading

pr-5/_sources/notebooks/examples/interactive_annotate.ipynb

Lines changed: 82 additions & 51 deletions
Large diffs are not rendered by default.

pr-5/notebooks/examples/interactive_annotate.html

Lines changed: 64 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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&amp;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">&quot;ignore&quot;</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
│ └── &#39;hne&#39;: 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[&lt;name&gt;]</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(&lt;name&gt;)</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=&quot;tumor_region&quot;. Coordinates are in the &#39;global&#39; coordinate system</span>
448+
<span class="c1"># name=&quot;poly&quot;. Coordinates are in the &#39;global&#39; 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">&quot;tumor_region&quot;</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">&quot;poly&quot;</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">&quot;geometry&quot;</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">&quot;global&quot;</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">&quot;tumor_region&quot;</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">&quot;poly&quot;</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">&quot;hne&quot;</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">&quot;tumor_region&quot;</span><span class="p">,</span> <span class="n">outline_color</span><span class="o">=</span><span class="s2">&quot;#22d3ee&quot;</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">&quot;poly&quot;</span><span class="p">,</span> <span class="n">outline_color</span><span class="o">=</span><span class="s2">&quot;red&quot;</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">&quot;tumor_region&quot;</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">&quot;poly&quot;</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">&quot;global&quot;</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-
│ └── &#39;hne&#39;: DataTree[cyx] (3, 2200, 2400), (3, 1100, 1200), (3, 550, 600), (3, 275, 300)
554+
│ └── &#39;hne&#39;: DataTree[cyx] (3, 2407, 3858), (3, 1204, 1929), (3, 601, 964), (3, 301, 483)
549555
├── Shapes
550-
│ ├── &#39;spots&#39;: GeoDataFrame shape: (261, 2) (2D shapes)
551-
│ └── &#39;tumor_region&#39;: GeoDataFrame shape: (1, 1) (2D shapes)
556+
│ ├── &#39;poly&#39;: GeoDataFrame shape: (1, 1) (2D shapes)
557+
│ └── &#39;spots&#39;: GeoDataFrame shape: (351, 2) (2D shapes)
552558
└── Tables
553-
└── &#39;adata&#39;: AnnData (261, 18078)
559+
└── &#39;adata&#39;: AnnData (351, 18078)
554560
with coordinate systems:
555561
▸ &#39;global&#39;, 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">&quot;hne&quot;</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">&quot;spots&quot;</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">&quot;spots&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;total_counts&quot;</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>

pr-5/searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)