@@ -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