Matplotlib'de nasıl boş bir alt grafik yapabilirim?


87

Matplotlib'de bir grup alt grafik (örneğin, 3 x 2) yapıyorum, ancak 6'dan az veri setim var. Kalan alt grafiği nasıl boş yapabilirim?

Düzenleme şuna benziyor:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

Bu birkaç sayfa için devam edebilir, ancak son sayfada, örneğin 2,1 kutusuna 5 veri kümesi boş olacaktır. Ancak rakamı şöyle beyan ettim:

cfig,ax = plt.subplots(3,2)

Dolayısıyla, 2,1 alt plan için boşlukta, işaretler ve etiketler içeren varsayılan bir eksen kümesi vardır. Bu alanı programatik olarak nasıl boş ve eksensiz hale getirebilirim?

Yanıtlar:


145

İhtiyacınız olmayan eksenleri her zaman gizleyebilirsiniz. Örneğin, aşağıdaki kod 6. ekseni tamamen kapatır:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

ve aşağıdaki şekilde sonuçlanır:

Sağ alt hücrede herhangi bir grafik gösterilmeden 3x2 grafik ızgarası görüntüsü

Alternatif olarak, eksenleri tutmanın ancak tüm eksen dekorasyonlarını gizlemenin bir yolu için matplotlib grafiklerinde eksen metnini gizleme sorusunun kabul edilen cevabına bakın (örneğin, çentik işaretleri ve etiketler).


Teşekkürler - bu aslında asıl soruma daha da yakın. Diğer yanıtı zaten kabul ettim ve kodu kullanmak için uyarladım, ancak her iki yaklaşım da harika.
mishaF

Harika, daha az add_subplot()dağınıklık olduğu için bu gerçekten güzel .
moooeeeep

Bu harika!
FaCoffee

Bu hiçbir olay örgüsü göstermiyor ve bunun boş bir olay olduğu söylenebilir. Veri olmadığını açıkça göstermek için hiçbir verisi olmayan bir olay örgüsü arıyordum. Bu cevabın herhangi bir kolay değişikliği, bunu yapan nedir?
Zelphir Kaltstahl

@Zelphir Neyin peşinde olduğunuzdan emin değilim: diğer beş grafik, veri içermeyen boş grafikler, bu yüzden ekstra ne istediğinizden emin değilim. Ayrıca bu yeni bir sorudur. Gelecekte, lütfen eski bir cevaba yorum yapmak yerine bunu yeni bir soru olarak sorun.
Chris

26

Bir çok gelişmiş subplot arayüzü bu soruyu ilk istendi beri Matplotlib eklenmiştir. Burada ekstraları gizlemeden tam olarak ihtiyacınız olan alt grafikleri oluşturabilirsiniz. Ek olarak, alt grafikler ek satırlara veya sütunlara yayılabilir.

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

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


Vay canına - bu güzel bir gelişme. Çok daha basit! Teşekkürler @Hooked!
mishaF

@Hooked, bu son boşluk bir efsane eklemek için mükemmel. Efsaneyi oraya yerleştirmenin bir yolunu biliyor musun?
Stefano

@Stefano eminim bunu yapmanın yolları var - ama bu en iyi yeni bir soru olarak sorulabilir, hatta bu yanıtı sorunuza bağlayabilirsiniz (StackOverflow btw'ye hoş geldiniz!)
Hooked

7

Axes.set_visible () yöntemini kullanarak bir alt grafiği gizlemek de mümkündür.

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
ax = fig.add_subplot(3,2,i+1)
ax.plot(range(1,6), data[i])
if i == 5:
    ax.set_visible(False)

Cevabınız hem orijinal Eksenler hem de genişletilmiş GeoAx'lar için harika!
Fei Yao

1

İhtiyaç duyduğunuzda alt grafikleri oluşturmak bir seçenek olur mu?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")

Öyle düşünmüyorum çünkü kısalık için orijinal soruya dahil etmediğim, yapmam gereken başka biçimlendirme işleri var. Bunlardan biri plt.subplots_adjust (wspace = 0, hspace = 0). Aslında bunun işe yarayacağından emin değilim.
mishaF

@mishaF: Bu yaklaşımı kullanarak subplots_adjust () yapabilirsiniz. Düzenlememe bakın.
moooeeeep
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.