Open
Description
This code is copy-pasted from this SO question.
Bug report
Bug summary
Creating a secondary axis and calling the .grid()
method on it does not draw a grid. If it should not draw grid, it should throw an Exception.
Code for reproduction
import matplotlib.pyplot as plt
import numpy as np
def get_data_and_ticks():
# generate dummy load duration curve
dur = 2500
y = np.random.normal(60, 30, dur + 1)
y[::-1].sort()
x = range(0, dur + 1)
perticks = np.linspace(0, 1, 11)
xticks = perticks * dur
yticks = np.interp(xticks, range(0, dur + 1), y)
return x, y, xticks, yticks
x, y, xticks, yticks = get_data_and_ticks()
# create figure object with axe object
fig, ax1 = plt.subplots(figsize=(10, 7))
ax1.plot(x, y)
# create second axis
color = "tab:blue"
ax2 = ax1.secondary_yaxis("right")
ax2.set_yticks(yticks)
ax2.set_yticklabels(labels=[f"{i*10}%" for i in range(11)])
ax2.tick_params(axis="y", color=color, labelcolor=color)
# draw grid lines on the secondaryaxis
# The problem is at this line
ax2.grid(color=color, which="major", linestyle="--")
plt.show()
Actual outcome
Expected outcome
Alternative A
draw a figure like this:
Alternative B
Raise an exception and tell the user that SecondaryAxis.grid()
is not supported.
Matplotlib version
- Operating system: Windows 10
- Matplotlib version: 3.3.3
- Matplotlib backend (
print(matplotlib.get_backend())
): TkAgg - Python version: 3.8.6 64-bit
Same applies if a SecondaryAxis is created for x
(ax1.secondary_xaxis("top")
)