Skip to content

Commit ed278ec

Browse files
committed
Fix slicing 2D images
1 parent bc496fc commit ed278ec

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

src/napari_matplotlib/slice.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Dict, Optional, Tuple
1+
from typing import Any, Dict, List, Optional, Tuple
22

33
import matplotlib.ticker as mticker
44
import napari
@@ -12,7 +12,6 @@
1212
__all__ = ["SliceWidget"]
1313

1414
_dims_sel = ["x", "y"]
15-
_dims = ["x", "y", "z"]
1615

1716

1817
class SliceWidget(SingleAxesWidget):
@@ -37,7 +36,7 @@ def __init__(
3736
self.dim_selector = QComboBox()
3837
button_layout.addWidget(QLabel("Slice axis:"))
3938
button_layout.addWidget(self.dim_selector)
40-
self.dim_selector.addItems(_dims)
39+
self.dim_selector.addItems(["x", "y", "z"])
4140

4241
self.slice_selectors = {}
4342
for d in _dims_sel:
@@ -61,7 +60,7 @@ def _layer(self) -> napari.layers.Layer:
6160
return self.layers[0]
6261

6362
@property
64-
def current_dim(self) -> str:
63+
def current_dim_name(self) -> str:
6564
"""
6665
Currently selected slice dimension.
6766
"""
@@ -74,32 +73,50 @@ def current_dim_index(self) -> int:
7473
"""
7574
# Note the reversed list because in napari the z-axis is the first
7675
# numpy axis
77-
return _dims[::-1].index(self.current_dim)
76+
return self._dim_names[::-1].index(self.current_dim_name)
77+
78+
@property
79+
def _dim_names(self) -> List[str]:
80+
"""
81+
List of dimension names. This is a property as it varies depending on the
82+
dimensionality of the currently selected data.
83+
"""
84+
if self._layer.data.ndim == 2:
85+
return ["x", "y"]
86+
elif self._layer.data.ndim == 3:
87+
return ["x", "y", "z"]
88+
else:
89+
raise RuntimeError("Don't know how to handle ndim != 2 or 3")
7890

7991
@property
8092
def _selector_values(self) -> Dict[str, int]:
8193
"""
8294
Values of the slice selectors.
95+
96+
Mapping from dimension name to value.
8397
"""
8498
return {d: self.slice_selectors[d].value() for d in _dims_sel}
8599

86100
def _get_xy(self) -> Tuple[npt.NDArray[Any], npt.NDArray[Any]]:
87101
"""
88102
Get data for plotting.
89103
"""
90-
x = np.arange(self._layer.data.shape[self.current_dim_index])
104+
dim_index = self.current_dim_index
105+
if self._layer.data.ndim == 2:
106+
dim_index -= 1
107+
x = np.arange(self._layer.data.shape[dim_index])
91108

92109
vals = self._selector_values
93110
vals.update({"z": self.current_z})
94111

95112
slices = []
96-
for d in _dims:
97-
if d == self.current_dim:
113+
for dim_name in self._dim_names:
114+
if dim_name == self.current_dim_name:
98115
# Select all data along this axis
99116
slices.append(slice(None))
100117
else:
101118
# Select specific index
102-
val = vals[d]
119+
val = vals[dim_name]
103120
slices.append(slice(val, val + 1))
104121

105122
# Reverse since z is the first axis in napari
@@ -115,7 +132,7 @@ def draw(self) -> None:
115132
x, y = self._get_xy()
116133

117134
self.axes.plot(x, y)
118-
self.axes.set_xlabel(self.current_dim)
135+
self.axes.set_xlabel(self.current_dim_name)
119136
self.axes.set_title(self._layer.name)
120137
# Make sure all ticks lie on integer values
121138
self.axes.xaxis.set_major_locator(
Loading

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy