2009-11-13 16 views
64

W matplotlib, I make przerywane linie siatki w następujący sposób:matplotlib: Narysuj linie siatki za innymi elementami wykresu

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

jednak nie mogę dowiedzieć się, w jaki sposób (lub nawet jeśli jest to możliwe), aby linie siatki są rysowane za innymi elementami wykresu, takimi jak paski. Zmiana kolejności dodawania siatki względem dodawania innych elementów nie ma znaczenia.

Czy jest możliwe, aby linie siatki pojawiały się za wszystkim innym?

+7

'ax.set_axisbelow (True)' nadal działa. Również ładne dla wyjścia pdf ... – BandGap

Odpowiedz

61

Zgodnie z tym - http://old.nabble.com/axis-elements-and-zorder-td6119088.html - można użyć Axis.set_axisbelow(True)

(jestem obecnie instalacji matplotlib po raz pierwszy, więc nie mam pojęcia, czy to prawda - po prostu znalazłem go googlowania „matplotlib Z siatkę Order” - „porządek oo” jest zazwyczaj używany do opisania tego rodzaju rzeczy (z jest osią „na stronie”))

+13

Axis.set_axisbelow (True) – Joeya

+0

Czy możliwe jest posiadanie linii siatki poniżej paska/linii przy zachowaniu etykiet na górze? Opublikowalem te quesiton osobno http://stackoverflow.com/questions/29522447/in-matplotlib-is-there-a-way-to-set-gridlines-below-bars-lines-patches-while-re –

+0

Link już nie działa Obawiam się. – pingul

7

miałem ten sam problem i następuje pracował:

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

Wzrost 3 do a wyższa wartość, jeśli nie działa.

+7

Działa to, ponieważ 'siatka' ma' zorder = 2.5'. – farenorth

47

Dla mnie było jasne, jak stosować odpowiedź Andrew Cooke, więc jest to kompletne rozwiązanie oparte na tym:

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

Jeśli chcesz, aby potwierdzić ustawienie dla wszystkich figur, można ustawić

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

lub

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

działa dla Matplotlib> = 2,0.

Powiązane problemy