Skip to content

Commit 74afbe6

Browse files
committed
Fix positive/negative/nozero/skip_autolev issues
1 parent 74fd33e commit 74afbe6

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

proplot/axes/plot.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2490,14 +2490,15 @@ def _parse_level_list(
24902490
# However want to apply these to manual-input levels as well.
24912491
def _restrict_levels(levels):
24922492
kw = {}
2493+
levels = np.asarray(levels)
24932494
if len(levels) > 2:
24942495
kw['atol'] = 1e-5 * np.min(np.diff(levels))
24952496
if nozero:
2496-
levels = [lev for lev in levels if not np.isclose(lev, 0, **kw)]
2497+
levels = levels[~np.isclose(levels, 0, **kw)]
24972498
if positive:
2498-
levels = [lev for lev in levels if lev > 0 or np.isclose(lev, 0, **kw)]
2499+
levels = levels[(levels > 0) | np.isclose(levels, 0, **kw)]
24992500
if negative:
2500-
levels = [lev for lev in levels if lev < 0 or np.isclose(lev, 0, **kw)]
2501+
levels = levels[(levels < 0) | np.isclose(levels, 0, **kw)]
25012502
return levels
25022503

25032504
# Helper function to sanitize input levels
@@ -2570,26 +2571,29 @@ def _sanitize_levels(key, array, minsize):
25702571
pop = _pop_params(kwargs, self._parse_level_count, ignore_internal=True)
25712572
if pop:
25722573
warnings._warn_proplot(f'Ignoring unused keyword arg(s): {pop}')
2573-
if not np.iterable(levels) and not skip_autolev:
2574+
elif not skip_autolev:
25742575
levels, kwargs = self._parse_level_count(
25752576
*args, levels=levels, norm=norm, norm_kw=norm_kw, extend=extend,
25762577
negative=negative, positive=positive, **kwargs
25772578
)
2579+
else:
2580+
levels = values = None
25782581

25792582
# Determine default colorbar locator and norm and apply filters
25802583
# NOTE: DiscreteNorm does not currently support vmin and
25812584
# vmax different from level list minimum and maximum.
25822585
# NOTE: The level restriction should have no effect if levels were generated
25832586
# automatically. However want to apply these to manual-input levels as well.
2584-
locator = values if np.iterable(values) else levels
2585-
if np.iterable(locator):
2587+
if levels is not None:
2588+
# Apply default locator
2589+
locator = values if np.iterable(values) else levels
25862590
locator = _restrict_levels(locator)
25872591
if norm in ('segments', 'segmented') or isinstance(norm, pcolors.SegmentedNorm): # noqa: E501
25882592
locator = mticker.FixedLocator(locator)
25892593
else:
25902594
locator = pticker.DiscreteLocator(locator)
25912595
guides._add_guide_kw('colorbar', kwargs, locator=locator)
2592-
if np.iterable(levels):
2596+
# Apply default norm
25932597
levels = _restrict_levels(levels)
25942598
if len(levels) == 0: # skip
25952599
pass
@@ -2602,14 +2606,6 @@ def _sanitize_levels(key, array, minsize):
26022606
if norm in ('segments', 'segmented'):
26032607
norm_kw['levels'] = levels
26042608

2605-
# Filter the level boundaries
2606-
if np.iterable(levels):
2607-
if nozero:
2608-
levels = levels[levels != 0]
2609-
if positive:
2610-
levels = levels[levels >= 0]
2611-
if negative:
2612-
levels = levels[levels <= 0]
26132609
return levels, vmin, vmax, norm, norm_kw, kwargs
26142610

26152611
def _parse_level_lim(

0 commit comments

Comments
 (0)