From d18f7ac0c9d6ce470776b460ecf2a9473b8b8057 Mon Sep 17 00:00:00 2001 From: Marcelo Zoccoler Date: Mon, 14 Jul 2025 13:49:40 +0200 Subject: [PATCH 1/5] Fix highlighted bin patch cleanup in Histogram2D Moved the removal and clearing of _highlighted_bin_patches from Histogram2D._highlight_data to the base Artist class cleanup methods. This fixes a bug where patches were being cleared multiple times and the list of patches was not being emptied. --- src/biaplotter/artists.py | 16 ++-------------- src/biaplotter/artists_base.py | 2 ++ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/biaplotter/artists.py b/src/biaplotter/artists.py index 40546fb..0301010 100644 --- a/src/biaplotter/artists.py +++ b/src/biaplotter/artists.py @@ -2,6 +2,7 @@ from typing import List, Tuple, Union import matplotlib.pyplot as plt +import matplotlib.patches as mpatches import numpy as np from matplotlib.colors import Colormap, Normalize from nap_plot_tools.cmap import (cat10_mod_cmap, @@ -383,6 +384,7 @@ def __init__( self._bin_alpha = None self._bins = bins self._highlighted = None # Initialize highlight mask + self._highlighted_bin_patches = [] self._histogram_colormap = BiaColormap(histogram_colormap) self._histogram_interpolation = "nearest" self._overlay_interpolation = "nearest" @@ -747,11 +749,6 @@ def _get_normalization( def _highlight_data(self, boolean_mask: np.ndarray): """Highlight data points based on the provided indices.""" if boolean_mask is None or len(boolean_mask) == 0: - # Remove previous highlighted patches if they exist - if hasattr(self, "_highlighted_bin_patches"): - for patch in self._highlighted_bin_patches: - patch.remove() - self._highlighted_bin_patches = [] # Reset all bins to fully opaque self.bin_alpha = np.ones_like(self._histogram[0]) self._highlighted = None @@ -777,15 +774,6 @@ def _highlight_data(self, boolean_mask: np.ndarray): self.bin_alpha = alphas # Draw rectangle patches around highlighted bins - import matplotlib.patches as mpatches - - # Remove previous rectangle patches if they exist - if hasattr(self, "_highlighted_bin_patches"): - for patch in self._highlighted_bin_patches: - patch.remove() - self._highlighted_bin_patches = [] - - # Add new rectangle patches for currently highlighted bins for bin_x in range(highlighted_bins.shape[0]): for bin_y in range(highlighted_bins.shape[1]): if highlighted_bins[bin_x, bin_y]: diff --git a/src/biaplotter/artists_base.py b/src/biaplotter/artists_base.py index 61291f9..7dc3eb8 100644 --- a/src/biaplotter/artists_base.py +++ b/src/biaplotter/artists_base.py @@ -141,6 +141,7 @@ def _remove_artists(self, keys: List[str] = None): if hasattr(self, "_highlighted_bin_patches"): for patch in self._highlighted_bin_patches: patch.remove() + self._highlighted_bin_patches = [] for artist in self._mpl_artists.values(): artist.remove() self._mpl_artists = {} @@ -152,6 +153,7 @@ def _remove_artists(self, keys: List[str] = None): if hasattr(self, "_highlighted_bin_patches"): for patch in self._highlighted_bin_patches: patch.remove() + self._highlighted_bin_patches = [] self._mpl_artists[key].remove() del self._mpl_artists[key] From b55b207b65f9817c6f555f29ede9c1e22dab1468 Mon Sep 17 00:00:00 2001 From: Marcelo Zoccoler Date: Mon, 14 Jul 2025 13:55:06 +0200 Subject: [PATCH 2/5] Re-bind Escape key on widget show event Adds a showEvent handler to CanvasWidget to re-bind the Escape key to clear selections and highlights when the widget is shown. --- src/biaplotter/plotter.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/biaplotter/plotter.py b/src/biaplotter/plotter.py index a8dcef8..563d571 100644 --- a/src/biaplotter/plotter.py +++ b/src/biaplotter/plotter.py @@ -121,6 +121,14 @@ def hideEvent(self, event): self.napari_viewer.bind_key("Escape", None, overwrite=True) super().hideEvent(event) + def showEvent(self, event): + """Handles the show event of the widget. + + Re-binds Escape to clear selections and highlights. + """ + super().showEvent(event) + self.napari_viewer.bind_key("Escape", self._on_escape, overwrite=True) + def _initialize_mpl_toolbar(self): """ Replaces the default matplotlib toolbar with a custom one that emits signals. From 9dd941ea3b6dc67c51d85286b63b408ce2f8ff42 Mon Sep 17 00:00:00 2001 From: Marcelo Zoccoler Date: Mon, 14 Jul 2025 13:59:13 +0200 Subject: [PATCH 3/5] Fix visibility toggle for highlighted bin patches Ensures that highlighted bin patches are shown or hidden when the artist's visibility is changed by updating their visibility state accordingly. --- src/biaplotter/artists_base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/biaplotter/artists_base.py b/src/biaplotter/artists_base.py index 7dc3eb8..ba5287e 100644 --- a/src/biaplotter/artists_base.py +++ b/src/biaplotter/artists_base.py @@ -243,6 +243,9 @@ def visible(self, value: bool): """Sets the visibility of the artists.""" self._visible = value [a.set_visible(value) for a in self._mpl_artists.values()] + if hasattr(self, "_highlighted_bin_patches"): + for patch in self._highlighted_bin_patches: + patch.set_visible(value) self.draw() @property From fa50eb6f157dff580d5c13674b8b6e0e8fa64b74 Mon Sep 17 00:00:00 2001 From: Marcelo Zoccoler Date: Mon, 14 Jul 2025 13:59:22 +0200 Subject: [PATCH 4/5] Update histogram_artist_example.ipynb --- docs/examples/histogram_artist_example.ipynb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/examples/histogram_artist_example.ipynb b/docs/examples/histogram_artist_example.ipynb index 2264b4c..84f4dee 100644 --- a/docs/examples/histogram_artist_example.ipynb +++ b/docs/examples/histogram_artist_example.ipynb @@ -139,7 +139,7 @@ "
cat10_modified_first_transparent
\"cat10_modified_first_transparent
under
bad
over
" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -333,7 +333,7 @@ "
magma
\"magma
under
bad
over
" ], "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -364,7 +364,7 @@ "
viridis
\"viridis
under
bad
over
" ], "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -416,7 +416,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:452: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", + "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:462: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", " warnings.warn(\n" ] }, @@ -544,7 +544,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:452: UserWarning: Log normalization applied to color indices with min value 1.0. Values below 0.01 were set to 0.01.\n", + "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:462: UserWarning: Log normalization applied to color indices with min value 1.0. Values below 0.01 were set to 0.01.\n", " warnings.warn(\n" ] }, @@ -574,7 +574,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:452: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", + "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:462: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", " warnings.warn(\n" ] }, @@ -623,7 +623,7 @@ "
jet
\"jet
under
bad
over
" ], "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -817,7 +817,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:452: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", + "C:\\Users\\mazo260d\\Documents\\GitHub\\biaplotter\\src\\biaplotter\\artists_base.py:462: UserWarning: Log normalization applied to color indices with min value 0.01. Values below 0.01 were set to 0.01.\n", " warnings.warn(\n" ] }, @@ -861,7 +861,7 @@ "outputs": [ { "data": { - "image/png": "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PPjgg2mH46yVSqV46KGHYu3atbFp06ZzKkIiPv87XC7/e9teU6ZMiV27dp1y3+zZs+OKK66IhQsX9ugIOXHiROzbty/uueeer/1cZR0i7bVt27bYvn173HjjjTFgwIDYt29fPProozF69OiyuBrSEQcPHoxJkybFiBEj4sknn4xjx461PjZ48OCEk3W+/fv3x/Hjx2P//v3R3NwcO3fujIiISy+9NPr37592uK9pwYIFMWvWrLjmmmti/Pjx8dRTT0VTU1PMnj079Wid6sSJE7F3797W2x988EHs3LkzBg4cGMOHD084WeebN29erF69OtavXx9VVVWt+33y+Xz07ds38XSda/HixTFt2rQYPnx4NDY2xurVq2PTpk3x8ssvpx6tU1VVVX1pj88X+xB72t6fn/3sZzF9+vQYMWJEHDp0KJYsWRK9evWKH/3oR1//yTP5LE43889//rM0efLk0sCBA0uVlZWlSy65pPTAAw+UDhw4kHq0TrdixYpSRJz26GlmzZp12tf56quvph6tUzz99NOl4cOHl3r37l0aP358aevWralH6nSvvvrqaf8MZ82alXq0Tnemf5crVqxIPVqn+/GPf1waMWJEqXfv3qWamprSlClTSq+88krqsbpET/347l133VUaMmRIqXfv3qVvfvObpbvuuqu0d+/eTnnust4jAgCUt/LZPAAA9DhCBABIRogAAMkIEQAgGSECACQjRACAZIQIAJCMEAEAkhEiAEAyQgQASEaIAADJCBEAIJn/A2GJpVgphAarAAAAAElFTkSuQmCC", + "image/png": "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9u3bF08//fRJ35YpFotRLBY7HxcKhZ4YDQBIpMtXRBYtWhS5XO6k2549e477nYMHD8bNN98cs2bNirlz537lsRsaGiKfz3duNTU1XT8jAKBsdPkekSNHjsSnn3560n3Gjh0bAwYMiIiIpqammDp1alx77bWxatWq6Nfvq9vnRFdEampq3CMCAGWkK/eIdPmtmerq6qiurj6lfQ8ePBjTpk2LiRMnxsqVK08aIRERFRUVUVFR0dWRAIAyldk9IgcPHoypU6fG6NGj48knn4wjR450/uyiiy7KalkAoIxkFiIbN26Mffv2xb59+2LkyJHH/awHPzEMAPRimX1897777otSqXTCDQAgwr81AwAkJEQAgGSECACQjBABAJIRIgBAMkIEAEhGiAAAyQgRACAZIQIAJCNEAIBkhAgAkIwQAQCSESIAQDJCBABIRogAAMkIEQAgGSECACQjRACAZIQIAJCMEAEAkhEiAEAyQgQASEaIAADJCBEAIBkhAgAkI0QAgGSECACQjBABAJIRIgBAMkIEAEhGiAAAyQgRACAZIQIAJCNEAIBkhAgAkIwQAQCSESIAQDJCBABIJtMQue2222LUqFExcODAuPjii+Oee+6JpqamLJcEAMpIpiEybdq0eO6552Lv3r3x/PPPx/79++POO+/MckkAoIzkSqVSqacW++tf/xozZ86MYrEY55577tfuXygUIp/PR3Nzc1RVVfXAhADAmerK6/c5PTRTHD16NFavXh1Tpkz5yggpFotRLBY7HxcKhZ4aDwBIIPObVRcuXBjnnXdeXHDBBXHgwIHYsGHDV+7b0NAQ+Xy+c6upqcl6PAAgoS6HyKJFiyKXy51027NnT+f+Dz/8cLz99tvx8ssvR//+/ePee++Nr3o3aPHixdHc3Ny5NTY2nv6ZAQC9XpfvETly5Eh8+umnJ91n7NixMWDAgC89/+GHH0ZNTU289tprMXny5K9dyz0iAFB+Mr1HpLq6Oqqrq09rsI6OjoiI4+4DAQDOXpndrLpt27bYvn17XH/99TF06NDYv39/PPLIIzFu3LhTuhoCAPR9md2sOnjw4PjLX/4S06dPj8suuyzmzJkT48ePjy1btkRFRUVWywIAZSSzKyLf+c534h//+McZHeOL21d8jBcAyscXr9unchtqj32PyOloaWmJiPAxXgAoQy0tLZHP50+6T49+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", "text/plain": [ "
" ] From c5c8fa1fa4392f0afe9a97aef522708bf3c1d2cf Mon Sep 17 00:00:00 2001 From: Marcelo Zoccoler Date: Mon, 14 Jul 2025 13:59:57 +0200 Subject: [PATCH 5/5] Bump version to 0.4.1 Update the package version from 0.4.0 to 0.4.1 in preparation for a new release. --- src/biaplotter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/biaplotter/__init__.py b/src/biaplotter/__init__.py index ef186d1..a16c0bd 100644 --- a/src/biaplotter/__init__.py +++ b/src/biaplotter/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.4.0" +__version__ = "0.4.1" from .artists import Histogram2D, Scatter from .colormap import BiaColormap from .plotter import CanvasWidget