Matplotlib'de çizgi grafiğinde dikey kılavuz çizgilerinin görünmesi


97

Grafiğimde hem yatay hem de dikey ızgara çizgileri elde etmek istiyorum, ancak varsayılan olarak yalnızca yatay ızgara çizgileri görünüyor. pandas.DataFrameX ekseninde tarihler içeren bir çizgi grafiği oluşturmak için python'daki bir sql sorgusundan bir kullanıyorum . Tarihlerde neden görünmediklerinden emin değilim ve buna bir cevap aramaya çalıştım ama bulamadım.

Grafiği çizmek için kullandığım tek şey aşağıdaki basit koddur.

data.plot()
grid('on')

data, tarihleri ​​ve sql sorgusundan gelen verileri içeren DataFrame'dir.

Aşağıdaki kodu da eklemeyi denedim, ancak yine de dikey ızgara çizgileri olmadan aynı çıktıyı alıyorum.

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

Herhangi bir öneri?

görüntü açıklamasını buraya girin


data.plot(grid="on")benim için çalıştı
Markus

Yanıtlar:


102

Çağrılarınızda boole argümanı vermeniz gerekebilir, örneğin ax.yaxis.grid(True)yerine kullanın ax.yaxis.grid(). Ek olarak, ikisini de kullandığınız ax.gridiçin, her boyut için bir kez yapmak yerine, her ikisinde de işe yarayan şekilde birleştirebilirsiniz .

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

Bu seni çözmeli.


Ben denedim ama nedense hala öncekiyle aynı görünüyor
Osmond Bishop

1
Bunu interaktif tercümanla mı yapıyorsunuz? Emin ızgara kuruyorsunuz olun önce çağıranplt.show()
wim

İPython kullanıyorum. Plt.show () eklemeyi denedim, bir fark yaratmayacak.
Osmond Bishop

1
Bu tuhaf. İpython sürümünüz nedir, aynı zamanda çalıştırmayı deneyin ipython --pylabve plt.grid(True)hemen yapın - ızgarayı görüyor musunuz?
2013

plt.grid(True)Hem dikey hem de yatay ızgara çizgileriyle boş grafiği denedim ve aldım, bu yüzden evet, bunu çizgi grafiğim için alamama neden garip. İPython'un mevcut en son sürümünü çalıştırıyorum.
Osmond Bishop

59

plt.gca().xaxis.grid(True) benim için çözüm olduğunu kanıtladı


6
myaxes.grid(which='x')Matplotlib sürümü 1.4.2 benim için çalışma değildi ... alamadım whichhiç işe anahtar kelime. Ancak, myaxes.xaxis.grid(True)hile yaptı ve kavramsal olarak daha iyi IMO. Oh, ve myaxes.set_axisbelow(True)ızgarayı verilerin arkasına yerleştirmenin yararlı yöntemini de unutmayın .
travc

27

Matplotlib belgelerine göre , Axessınıf grid()yönteminin imzası aşağıdaki gibidir:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Eksen ızgaralarını açın veya kapatın.

which büyük kene ızgaralarının, küçük kene ızgaralarının veya her ikisinin de etkilenip etkilenmediğini kontrol etmek için 'büyük' ​​(varsayılan), 'küçük' veya 'her ikisi' olabilir.

axis hangi kılavuz çizgilerinin çizileceğini kontrol etmek için "her ikisi" (varsayılan), "x" veya "y" olabilir.

Dolayısıyla, hem x ekseni hem de y ekseni için ızgara çizgilerini göstermek için aşağıdaki kodu kullanabiliriz:

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

Bu yöntem bize ızgara çizgileri için neyin gösterileceği konusunda daha iyi kontrol sağlar.



3

Kısa cevap (daha fazla bilgi için aşağıyı okuyun):

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

görüntü açıklamasını buraya girin

Yaptığınız şey doğrudur ve işe yaramalıdır.

Bununla birlikte, örneğinizdeki X ekseni bir DateTime ekseni olduğu için, Ana onay işaretleri (büyük olasılıkla) yalnızca X ekseninin her iki ucunda da görünür. Diğer görünür onay işaretleri, Küçük onay işaretleridir.

ax.grid()Yöntem, varsayılan olarak, Temel im-işaretleri Kılavuz çizgileri çizer. Bu nedenle, arsanızda hiçbir şey görünmez.

Onay işaretlerini vurgulamak için aşağıdaki kodu kullanın. Küçükler Kırmızı iken Büyükler Mavi olacaktır.

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')

Şimdi, ızgara çizgilerini Küçük değer çizgileri üzerinde de görünmeye zorlamak which='minor'için, yönteme geçin:

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

veya which='both'hem Büyük hem de Küçük ızgara çizgileri çizmek için kullanın . Ve bu daha zarif bir ızgara çizgisi:

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

2

Yalnızca yatay çizgiler için

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

Bu çalıştı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.