Matplotlib'de birden çok alt grafiği nasıl edinirim?


176

Bu kodun nasıl çalıştığı konusunda biraz kafam karıştı:

fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()

Bu durumda incir, baltalar nasıl çalışır? Bu ne işe yarıyor?

Ayrıca neden bu aynı şeyi yapmak için çalışmasın:

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

1
Matplotlib 2.1'den itibaren ikinci kod çalışır .
kullanıcı

Yanıtlar:


237

Bunu yapmanın birkaç yolu var. subplotsYöntem, daha sonra saklanır subplots ile birlikte şekil oluşturur axdizisi. Örneğin:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

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

Bununla birlikte, bunun gibi bir şey de işe yarayacaktır, ancak alt grafiklerle bir figür oluşturduğunuz ve ardından bunların üstüne eklediğiniz için o kadar "temiz" değildir:

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

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


4
Bunun yerine, plot(x, y)networkx ile bir grafik oluşturan kullanıcı tanımlı bir fonksiyondan gelen çizimim var. Bu nasıl kullanılır?
Sigur

For döngüsü olmadan birden fazla alt grafik üretmek mümkün müdür? Örneğin, farklı grafiklerde birden çok veri sütununu çizmek için vektörleştirilmiş bir çözüm var mı? Bu, R'deki ggplot ile çok basit, ancak Python ile imkansız görünüyor.
user2739472

3
döngüler için ikisini bire axn = ax.flatten()for axes in axn: axes.plot(x,y)
indirebilir

@ wander95 TEŞEKKÜR EDERİZ, bu yanıt siz olmadan col = 1 veya row = 1 için çalışmaz
Gulzar

55
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

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


1
Ne axolduğunu anlıyorum ama ne olduğunu değil fig. Onlar neler?
Leevo

3
axe aslında uyuşmuş bir dizidir. incir, matplotlib.figure.Figureçizilen şekle çok fazla manipülasyon yapabileceğiniz bir sınıftır. örneğin, belirli bir alt grafiğe renk çubuğu ekleyebilir, tüm alt planların arkasındaki arka plan rengini değiştirebilirsiniz. Bu alt planların düzenini değiştirebilir veya bunlara yeni bir küçük balta ekleyebilirsiniz. tercihen fig.suptitle(title)yöntemle elde edilebilecek tüm alt noktalar için tek bir ana başlık isteyebilirsiniz . nihayet arsadan memnun olduğunuzda, fig.savefigyöntemi kullanarak kaydedebilirsiniz . @Leevo
Khalil Al Hooti

22
  • Ayrıca subplots çağrısındaki eksenleri de açabilirsiniz.

  • Ve alt noktalar arasında x ve y eksenlerini paylaşmak isteyip istemediğinizi ayarlayın.

Bunun gibi:

import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

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


14

Matplotlib sürüm 2.1'den itibaren sorudaki ikinci kodun da iyi çalıştığı gerçeği ilginizi çekebilir.

Gönderen Değişiklik günlüğünde :

Figure sınıfı artık subplots yöntemine sahiptir Figure sınıfı artık pyplot.subplots () ile aynı, ancak mevcut bir şekilde davranan bir subplots () yöntemine sahiptir.

Misal:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()

Aldığım: AttributeError Traceback (en son çağrı) <module> içinde <ipython-input-168-ed25aa5255fa> () 2 3 fig = plt.figure () ----> 4 eksen = fig.subplots (nrows = 2 , ncols = 2) AttributeError: 'Şekil' nesnesinin 'alt noktalar' özniteliği yok
Ludo Schmidt

1
@LudoSchmidt Yanıt "matplotlib sürüm 2.1'den itibaren ..." diyor
ImportanceOfBeingErnest

11

belgeleri okuyun: matplotlib.pyplot.subplots

pyplot.subplots()fig, axgösterimi kullanarak iki değişken halinde paketlenmiş bir demet döndürür

fig, axes = plt.subplots(nrows=2, ncols=2)

kod

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

çalışmıyor çünkü nesnenin üyesi olmayan bir subplots()işlev .pyplotFigure

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.