Skip to content

Commit

Permalink
Respect colorbar tickminor for discrete levels
Browse files Browse the repository at this point in the history
This ensures tickminor=True is respected if user passes custom
non-discrete locator (e.g. a MultipleLocator) with a BoundaryNorm
normalizer (in which case a default minor DiscreteLocator is used)
and ensures default rc['(x|y)tick.minor.visible'] setting of False
is respected even if DiscreteLocator is passed.
  • Loading branch information
lukelbd committed Jan 31, 2022
1 parent e189a9b commit 294c9ee
Showing 1 changed file with 8 additions and 15 deletions.
23 changes: 8 additions & 15 deletions proplot/axes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1089,25 +1089,18 @@ def _add_colorbar(
locator = _not_none(locator, locator_default, None)
formatter = _not_none(formatter, formatter_default, 'auto')
formatter = constructor.Formatter(formatter, **formatter_kw)
categorical = isinstance(formatter, mticker.FixedFormatter)
discrete = isinstance(mappable.norm, pcolors.DiscreteNorm)
if locator is not None:
locator = constructor.Locator(locator, **locator_kw)
if minorlocator is not None:
minorlocator = constructor.Locator(minorlocator, **minorlocator_kw)
if isinstance(locator, pticker.DiscreteLocator):
if categorical: # no minor ticks and convert DiscreteLocator
locator = mticker.FixedLocator(np.array(locator.locs))
elif minorlocator is not None:
pass
elif tickminor or tickminor is None:
minorlocator = pticker.DiscreteLocator(np.array(locator.locs), minor=True) # noqa: E501
if tickminor is not None: # whether to apply minorticks_on()
pass
elif discrete or categorical: # never use the default minor locator
tickminor = False
else:
tickminor = rc[name + 'tick.minor.visible']
discrete = isinstance(locator, pticker.DiscreteLocator)
categorical = isinstance(formatter, mticker.FixedFormatter)
tickminor = False if categorical else rc[name + 'tick.minor.visible']
if categorical and discrete:
locator = mticker.FixedLocator(np.array(locator.locs)) # convert locator
if tickminor and isinstance(mappable.norm, mcolors.BoundaryNorm):
locs = np.array(locator.locs if discrete else mappable.norm.boundaries)
minorlocator = pticker.DiscreteLocator(locs, minor=True)

# Special handling for colorbar keyword arguments
# WARNING: Critical to not pass empty major locators in matplotlib < 3.5
Expand Down

0 comments on commit 294c9ee

Please sign in to comment.