Ось.invert axis () не работает с sharey=True для вложенных диаграмм matplotlib


Я пытаюсь сделать 4 подзаголовка (2x2) с перевернутой осью y, а также разделить ось y между подзаголовками. Вот что я получаю:

import matplotlib.pyplot as plt
import numpy as np

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True)

for ax in AX.flatten():
    ax.invert_yaxis()
    ax.plot(range(10), np.random.random(10))

Введите описание изображения здесь

Оказывается, что ax.invert_axis() игнорируется, когда sharey=True. Если я задам sharey=False, я получу перевернутую ось y во всех подложках, но очевидно, что ось y больше не является общей для подложек. Я делаю что-то не так, это ошибка, или нет смысла делать что-то подобное?

1 5

1 ответ:

Поскольку вы установили sharey=True, все три оси теперь ведут себя так, как если бы они были одной. Например, когда вы инвертируете один из них, вы воздействуете на все четыре. Проблема заключается в том, что вы инвертируете оси в цикле for, который проходит через итерацию длиной четыре, таким образом, вы инвертируете все оси четное число раз... Перевернув уже перевернутый топор, вы просто восстановите его первоначальную ориентацию. Попробуйте вместо этого использовать нечетное число вложенных диаграмм, и вы увидите, что оси успешно работают. перевернутый.

Чтобы решить вашу проблему, вы должны перевернуть ось y одного отдельного подзаголовка (и только один раз). Для меня работает следующий код:

import matplotlib.pyplot as plt
import numpy as np

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True)

## access upper left subplot and invert it    
AX[0,0].invert_yaxis()

for ax in AX.flatten():
    ax.plot(range(10), np.random.random(10))

plt.show()