8000 `MaxNLocator` changes the scientific notation exponent with different number of tick labels · Issue #12072 · matplotlib/matplotlib · GitHub
[go: up one dir, main page]

Skip to content
MaxNLocator changes the scientific notation exponent with different number of tick labels #12072
Closed
@joelostblom

Description

@joelostblom

Bug report

Bug summary

MaxNLocator changes the scientific notation with different number of tick labels.

Code for reproduction

I encountered this unexpected behavior when I changed the y-ticklabel size. Going from size 13 to 14 changes the scientific notation from 1e9 to 1e10, and adds an decimal offset to all the ticklabels.

import matplotlib.pyplot as plt

sci_nums = [10**9, 8*10**9]
plt.rcParams['ytick.labelsize'] = 13
fig, ax = plt.subplots()
ax.scatter(range(len(sci_nums)), sci_nums)

image

plt.rcParams['ytick.labelsize'] = 14
fig, ax = plt.subplots()
ax.scatter(range(len(sci_nums)), sci_nums)

image

This is related to that the larger font size reduces the number of tickslabels. MaxNLocator apparently adjusts the scientific notation depending on the number of ticklabels.

plt.rcParams['ytick.labelsize'] = 13
fig, ax = plt.subplots()
ax.scatter(range(len(sci_nums)), sci_nums)

import matplotlib.ticker as ticker
ax.yaxis.set_major_locator(ticker.MaxNLocator(4))

image

I dont' quite understand the rule that MaxNLocator uses. Setting 1, 2, 4 or 5 ticklabels results in 1e10. Setting 3, 6, 7, 8, or 9 ticklabels results in 1e9.

Expected outcome
I would expect that changing the number of ticklabels (either directly or via another parameter such as the font size) would not result in a change in the formatting of the scientific notation. In this case, I would expect it to remain 1e9 for all the examples above.

Matplotlib version

  • Operating system: Linux
  • Matplotlib version: 2.2.2
  • Matplotlib backend (print(matplotlib.get_backend())): module://ipykernel.pylab.backend_inline
  • Python version: 3.6.6 (conda-forge)
  • Jupyter version (if applicable): jupyterlab=0.34.3, jupyter_core=4.4.0
  • Other libraries:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Devel 2B96 opment

    No branches or pull requests

    Issue actions

      0