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 06d4b17

Browse filesBrowse files
authored
Merge pull request #244 from p-j-smith/feat/integer-hist-bins
Use integer bins for integer data in `HistogramWidget`
2 parents c481207 + 610f19c commit 06d4b17
Copy full SHA for 06d4b17

File tree

4 files changed

+19
-4
lines changed
Filter options

4 files changed

+19
-4
lines changed

‎docs/changelog.rst

Copy file name to clipboardExpand all lines: docs/changelog.rst
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ Changes
88
- Histogram plots of points and vector layers are now coloured with their napari colourmap.
99
- Added support for Matplotlib 3.8
1010

11+
Bug fixes
12+
~~~~~~~~~
13+
- Use integer bin limits for integer images in ``HistogramWidget``
14+
1115
1.1.0
1216
-----
1317
Additions

‎src/napari_matplotlib/histogram.py

Copy file name to clipboardExpand all lines: src/napari_matplotlib/histogram.py
+15-4Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44
import numpy as np
55
import numpy.typing as npt
66
from matplotlib.container import BarContainer
7-
from qtpy.QtWidgets import QComboBox, QLabel, QVBoxLayout, QWidget
7+
from qtpy.QtWidgets import (
8+
QComboBox,
9+
QLabel,
10+
QVBoxLayout,
11+
QWidget,
12+
)
813

914
from .base import SingleAxesWidget
1015
from .features import FEATURES_LAYER_TYPES
@@ -65,20 +70,26 @@ def draw(self) -> None:
6570

6671
# Important to calculate bins after slicing 3D data, to avoid reading
6772
# whole cube into memory.
68-
bins = np.linspace(np.min(data), np.max(data), 100)
73+
if data.dtype.kind in {"i", "u"}:
74+
# Make sure integer data types have integer sized bins
75+
step = abs(np.max(data) - np.min(data)) // 100
76+
step = max(1, step)
77+
bins = np.arange(np.min(data), np.max(data) + step, step)
78+
else:
79+
bins = np.linspace(np.min(data), np.max(data), 100)
6980

7081
if layer.rgb:
7182
# Histogram RGB channels independently
7283
for i, c in enumerate("rgb"):
7384
self.axes.hist(
7485
data[..., i].ravel(),
75-
bins=bins,
86+
bins=bins.tolist(),
7687
label=c,
7788
histtype="step",
7889
color=_COLORS[c],
7990
)
8091
else:
81-
self.axes.hist(data.ravel(), bins=bins, label=layer.name)
92+
self.axes.hist(data.ravel(), bins=bins.tolist(), label=layer.name)
8293

8394
self._contrast_lines = [
8495
self.axes.axvline(lim, color="white")
Loading
Loading

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.