Matplotlib: menggambar garis kisi di belakang elemen grafik lainnya

124

Di Matplotlib, saya membuat garis putus-putus sebagai berikut:

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

namun, saya tidak dapat mengetahui bagaimana (atau bahkan jika memungkinkan) membuat garis kisi digambar di belakang elemen grafik lainnya, seperti batang. Mengubah urutan penambahan kisi versus penambahan elemen lain tidak membuat perbedaan.

Apakah mungkin untuk membuatnya sehingga garis kisi muncul di belakang yang lainnya?

Andrew
sumber
10
ax.set_axisbelow(True)masih bekerja. Juga bagus untuk keluaran pdf ...
BandGap
5
Saya akan berharap ax.set_axisbelow(True)menjadi default ...
PatrickT

Jawaban:

122

Menurut ini - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - Anda dapat menggunakanAxis.set_axisbelow(True)

(Saat ini saya menginstal matplotlib untuk pertama kalinya, jadi tidak tahu apakah itu benar - Saya baru saja menemukannya dengan googling "matplotlib z order grid" - "z order" biasanya digunakan untuk mendeskripsikan hal semacam ini (z adalah sumbu "di luar halaman"))

andrew cooke
sumber
Mungkinkah memiliki garis kisi di bawah batang / garis sambil mempertahankan label di atasnya? Saya juga memposting
pertanyaan
Mungkin matplotlib.1069221.n5.nabble.com/… ini , benang kuno sekalipun.
Jacques Kvam
86

Bagi saya, tidak jelas bagaimana menerapkan jawaban andrew cooke, jadi ini adalah solusi lengkap berdasarkan itu:

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

Jika Anda ingin memvalidasi pengaturan untuk semua gambar, Anda dapat mengatur

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

atau

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

Ia bekerja untuk Matplotlib> = 2.0.

Syrtis Major
sumber
8

Saya memiliki masalah yang sama dan yang berikut ini berhasil:

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

Tingkatkan 3ke nilai yang lebih tinggi jika tidak berhasil.

Saullo GP Castro
sumber