Matplotlib: рисование линий сетки за другими элементами графика

124

В Matplotlib я делаю пунктирные линии сетки следующим образом:

fig = pylab.figure()    
ax = fig.add_subplot(1,1,1)
ax.yaxis.grid(color='gray', linestyle='dashed')

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

Можно ли сделать так, чтобы линии сетки появлялись за всем остальным?

Андрей
источник
10
ax.set_axisbelow(True)до сих пор работает. Также хорошо для вывода в pdf ...
BandGap
5
Я ожидал, ax.set_axisbelow(True)что это будет дефолт ...
PatrickT

Ответы:

122

Согласно этому - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - вы можете использоватьAxis.set_axisbelow(True)

(В настоящее время я устанавливаю matplotlib впервые, поэтому понятия не имею, правильно ли это - я только что нашел его, выполнив поиск в Google "сетка порядка z matplotlib" - "порядок z" обычно используется для описания такого рода вещей (z - ось "вне страницы"))

Эндрю Кук
источник
Возможно ли, чтобы линии сетки находились под полосой / линией, а метки оставались наверху? Я также разместил этот вопрос отдельно stackoverflow.com/questions/29522447/…
joelostblom
Это может быть matplotlib.1069221.n5.nabble.com/… , хотя древняя ветка.
Жак Квам
86

Мне было непонятно, как применить ответ Эндрю Кука, поэтому это полное решение, основанное на этом:

ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')
Стефан
источник
35

Если вы хотите проверить настройку для всех цифр, вы можете установить

plt.rc('axes', axisbelow=True)

или

plt.rcParams['axes.axisbelow'] = True

Он работает для Matplotlib> = 2.0.

Syrtis Major
источник
8

У меня была такая же проблема, и работало следующее:

[line.set_zorder(3) for line in ax.lines]
fig.show() # to update

Увеличьте 3до большего значения, если это не работает.

Саулло Г. П. Кастро
источник