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


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

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

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

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

4 79

4 ответа:

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

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

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

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

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

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

или

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

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

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

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

увеличить 3к более высокому значению, если он не работает.