Membuat garis kisi vertikal muncul di plot garis di matplotlib

95

Saya ingin mendapatkan garis kisi horizontal dan vertikal di plot saya, tetapi hanya garis kisi horizontal yang muncul secara default. Saya menggunakan pandas.DataFramekueri dari sql dengan python untuk menghasilkan plot garis dengan tanggal pada sumbu x. Saya tidak yakin mengapa mereka tidak muncul pada tanggal dan saya telah mencoba mencari jawaban untuk ini tetapi tidak dapat menemukannya.

Yang saya gunakan untuk memplot grafik adalah kode sederhana di bawah ini.

data.plot()
grid('on')

data adalah DataFrame yang berisi tanggal dan data dari query sql.

Saya juga mencoba menambahkan kode di bawah ini tetapi saya masih mendapatkan output yang sama tanpa garis kisi vertikal.

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

Ada saran?

masukkan deskripsi gambar di sini

Osmond Bishop
sumber
data.plot(grid="on")bekerja untuk saya
Markus

Jawaban:

101

Anda mungkin perlu memberikan argumen boolean dalam panggilan Anda, misalnya gunakan, ax.yaxis.grid(True)bukan ax.yaxis.grid(). Selain itu, karena Anda menggunakan keduanya, Anda dapat menggabungkannya ax.grid, yang berfungsi pada keduanya, daripada melakukannya sekali untuk setiap dimensi.

ax = plt.gca()
ax.grid(True)

Itu seharusnya memilah Anda.

wim
sumber
Saya mencobanya tetapi untuk beberapa alasan masih terlihat sama seperti sebelumnya
Osmond Bishop
1
Apakah Anda melakukan ini dalam juru bahasa interaktif? Pastikan Anda mengatur grid sebelum meneleponplt.show()
wim
Saya menggunakan iPython. Saya telah mencoba menambahkan plt.show () itu tidak akan membuat perbedaan.
Osmond Bishop
1
Ini aneh. Apa versi ipython Anda, juga coba jalankan seperti itu ipython --pylab, dan lakukan plt.grid(True)segera - apakah Anda melihat kisi-kisi?
wim
Saya mencoba plt.grid(True)dan mendapatkan grafik kosong dengan garis kisi vertikal dan horizontal, jadi ya itu aneh mengapa saya tidak bisa mendapatkan ini untuk plot garis saya. Saya menjalankan versi terbaru iPython.
Osmond Bishop
59

plt.gca().xaxis.grid(True) terbukti menjadi solusi bagi saya

Matt
sumber
6
Itu myaxes.grid(which='x')tidak berfungsi untuk saya dengan matplotlib versi 1.4.2 ... tidak bisa membuat whichkata kunci berfungsi sama sekali. Namun, myaxes.xaxis.grid(True)melakukan trik dan IMO secara konseptual lebih baik. Oh, dan jangan lupa tentang myaxes.set_axisbelow(True)metode yang berguna untuk meletakkan grid di belakang data.
travc
27

Menurut dokumentasi matplotlib , Tanda tangan metode Axeskelas grid()adalah sebagai berikut:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Mengaktifkan atau menonaktifkan kisi sumbu.

which bisa 'mayor' (default), 'minor', atau 'keduanya' untuk mengontrol apakah grid centang mayor, grid centang minor, atau keduanya terpengaruh.

axis dapat berupa 'keduanya' (default), 'x', atau 'y' untuk mengontrol rangkaian garis kisi yang akan digambar.

Jadi untuk menampilkan garis grid untuk sumbu x dan sumbu y, kita dapat menggunakan kode berikut:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

Metode ini memberi kita kontrol yang lebih baik atas apa yang harus ditampilkan untuk garis kisi.

jdhao
sumber
7

mungkin ini bisa menyelesaikan masalah: matplotlib, tentukan ukuran grid pada sebuah plot

ax.grid(True, which='both')

Yang benar adalah bahwa grid berfungsi, tetapi hanya ada satu v-grid di 00:00 dan tidak ada grid yang lain. Saya menemui masalah yang sama yaitu hanya ada satu kisi pada 1 November di antara beberapa hari.

Lory_yang
sumber
3

Jawaban singkat (baca di bawah untuk info lebih lanjut):

ax.grid(axis='both', which='both')

masukkan deskripsi gambar di sini

Apa yang Anda lakukan sudah benar dan seharusnya berhasil.

Namun, karena sumbu X dalam contoh Anda adalah sumbu DateTime , tanda centang utama (kemungkinan besar) hanya muncul di kedua ujung sumbu X. Tanda centang lain yang terlihat adalah tanda centang minor .

The ax.grid()metode, secara default, menarik garis grid di Major tick-tanda. Oleh karena itu, tidak ada yang muncul di plot Anda.

Gunakan kode di bawah ini untuk menyorot tanda centang. Jurusan akan berwarna Biru sedangkan Anak di Bawah Umur berwarna Merah.

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

Sekarang untuk memaksa garis grid agar muncul juga pada tanda centang Minor, teruskan which='minor'ke metode:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

atau cukup gunakan which='both'untuk menggambar garis kisi Major dan Minor. Dan ini garis kisi yang lebih elegan:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')
Gelap
sumber
1

Hanya untuk garis horizontal

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

Ini berhasil

Mudit
sumber