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

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

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

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

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

Ответ 1

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

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

Ответ 2

Для меня было непонятно, как применить andrew cooke ответ, так что это полное решение, основанное на этом:

ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

Ответ 3

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

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

или

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

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

Ответ 4

У меня была такая же проблема, и работа над ней работала:

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

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