Не допускайте рисования линий сетки от двойной оси поверх художников из исходной оси - PullRequest
1 голос
/ 05 мая 2019

У меня есть ось, на которой я строю некоторые данные, и у меня есть другая двойная ось, которую я использую для рисования линий сетки в определенных позициях тиков (кроме тиков на исходной оси):

import matplotlib.pyplot as plt
import numpy as np

f, ax = plt.subplots()
ax.set_xlim([0, 1])
ax2 = ax.twiny()
ax2.set_xlim([0, 1])
ax2.set_xticks(np.linspace(0, 1, 11))
ax2.xaxis.grid()
x = np.linspace(0, 1, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.legend()
plt.show()

Теперь это имеет нежелательный эффект, так как линии сетки двойных осей рисуются поверх легенды и линейного графика исходной оси.Насколько я понимаю, это потому, что matplotlib рисует оси в том порядке, в котором они были созданы, и по этой причине zorder не поможет (потому что zorder указывает порядок только среди художников одной оси).

Я знаю, что вместо этого мог бы вывести данные на двойную ось ax2 (за которой следует ax2.legend()), но я бы предпочел, чтобы установка была такой, как есть.Вместо этого изменение порядка, в котором нарисованы две оси, должно решить проблему, но я не мог понять, как это сделать.Существует f.get_axes(), который, кажется, возвращает оси в том порядке, в котором они были созданы, но нет возможности вернуть его.

Или, может быть, существует даже другое решение?

Example

1 Ответ

3 голосов
/ 05 мая 2019

Вы можете изменить порядок самих осей.

ax.set_zorder(2)
ax2.set_zorder(1)
ax.patch.set_visible(False)

enter image description here

...