Matplotlib: rysuj linie siatki za innymi elementami wykresu


124

W Matplotlib tworzę przerywane linie siatki w następujący sposób:

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

jednak nie mogę się dowiedzieć, jak (ani nawet jeśli jest to możliwe), aby linie siatki były rysowane za innymi elementami wykresu, takimi jak słupki. Zmiana kolejności dodawania siatki w porównaniu z dodawaniem innych elementów nie ma znaczenia.

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


10
ax.set_axisbelow(True)nadal działa. Przyjemny również dla wyjścia PDF ...
BandGap

5
Spodziewałbym ax.set_axisbelow(True)się, że będzie to domyślny ...
PatrickT

Odpowiedzi:


122

Zgodnie z tym - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - możesz użyćAxis.set_axisbelow(True)

(Obecnie instaluję matplotlib po raz pierwszy, więc nie mam pojęcia, czy to prawda - znalazłem to po prostu wpisując w Google "matplotlib z order grid" - "Z order" jest zwykle używane do opisania tego rodzaju rzeczy (z jest osią „poza stroną”))


Czy można mieć linie siatki poniżej paska / linii, zachowując etykiety na górze? Opublikowałem również ten quesiton osobno stackoverflow.com/questions/29522447/ ...
joelostblom

Może to być ten matplotlib.1069221.n5.nabble.com/… , chociaż starożytny wątek.
Jacques Kvam,

86

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

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

34

Jeśli chcesz sprawdzić poprawność ustawienia dla wszystkich figur, możesz ustawić

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

lub

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

Działa dla Matplotlib> = 2.0.


8

Miałem ten sam problem i działały:

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

Zwiększ 3do wyższej wartości, jeśli nie działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.