Description
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)
plt.rcParams['ytick.labelsize'] = 14
fig, ax = plt.subplots()
ax.scatter(range(len(sci_nums)), sci_nums)
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))
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: