10000 Merge pull request #7770 from efiring/MaxN_integer_fix · matplotlib/matplotlib@5cdf8af · GitHub
[go: up one dir, main page]

Skip to content

Commit 5cdf8af

Browse files
committed
Merge pull request #7770 from efiring/MaxN_integer_fix
BUG: improve integer step selection in MaxNLocator
1 parent c4b655b commit 5cdf8af

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

lib/matplotlib/tests/test_ticker.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,13 @@ def test_MaxNLocator_integer():
3232
test_value = np.array([-1, 0, 1, 2])
3333
assert_almost_equal(loc.tick_values(-0.1, 1.1), test_value)
3434

35-
test_value = np.array([-0.3, 0, 0.3, 0.6, 0.9, 1.2])
35+
test_value = np.array([-0.25, 0, 0.25, 0.5, 0.75, 1.0])
3636
assert_almost_equal(loc.tick_values(-0.1, 0.95), test_value)
3737

38+
loc = mticker.MaxNLocator(nbins=5, integer=True, steps=[1, 1.5, 5, 6, 10])
39+
test_value = np.array([0, 15 8000 , 30, 45, 60])
40+
assert_almost_equal(loc.tick_values(1, 55), test_value)
41+
3842

3943
def test_LinearLocator():
4044
loc = mticker.LinearLocator(numticks=3)

lib/matplotlib/ticker.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,8 @@ def set_params(self, **kwargs):
17261726
raise ValueError(
17271727
"prune must be 'upper', 'lower', 'both', or None")
17281728
self._prune = prune
1729+
if 'min_n_ticks' in kwargs:
1730+
self._min_n_ticks = max(1, kwargs['min_n_ticks'])
17291731
if 'steps' in kwargs:
17301732
steps = kwargs['steps']
17311733
if steps is None:
@@ -1735,12 +1737,6 @@ def set_params(self, **kwargs):
17351737
self._extended_steps = self._staircase(self._steps)
17361738
if 'integer' in kwargs:
17371739
self._integer = kwargs['integer']
1738-
if self._integer:
1739-
self._steps = np.array([n for n in self._steps
1740-
if _divmod(n, 1)[1] < 0.001])
1741-
self._extended_steps = self._staircase(self._steps)
1742-
if 'min_n_ticks' in kwargs:
1743-
self._min_n_ticks = max(1, kwargs['min_n_ticks'])
17441740

17451741
def _raw_ticks(self, vmin, vmax):
17461742
if self._nbins == 'auto':
@@ -1757,6 +1753,11 @@ def _raw_ticks(self, vmin, vmax):
17571753
_vmax = vmax - offset
17581754
raw_step = (vmax - vmin) / nbins
17591755
steps = self._extended_steps * scale
1756+
if self._integer:
1757+
# For steps > 1, keep only integer values.
1758+
igood = (steps < 1) | (np.abs(steps - np.round(steps)) < 0.001)
1759+
steps = steps[igood]
1760+
17601761
istep = np.nonzero(steps >= raw_step)[0][0]
17611762

17621763
# Classic round_numbers mode may require a larger step.

0 commit comments

Comments
 (0)
0