Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ed278ec

Browse filesBrowse files
committed
Fix slicing 2D images
1 parent bc496fc commit ed278ec
Copy full SHA for ed278ec

File tree

2 files changed

+27
-10
lines changed
Filter options

2 files changed

+27
-10
lines changed

‎src/napari_matplotlib/slice.py

Copy file name to clipboardExpand all lines: src/napari_matplotlib/slice.py
+27-10Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.