Matplotlib'de, fig.add_subplot (111) 'deki argüman ne anlama geliyor?


472

Bazen böyle bir kod rastlamak:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
fig = plt.figure()
fig.add_subplot(111)
plt.scatter(x, y)
plt.show()

Hangi üretir:

Dahil edilen kodla üretilen örnek grafik

Ben deli gibi belgeleri okuyordum ama için bir açıklama bulamıyorum 111. bazen a 212.

Anlam argümanı ne anlama fig.add_subplot()geliyor?

Yanıtlar:


471

Bunlar, tek bir tamsayı olarak kodlanan alt grafik ızgara parametreleridir. Örneğin, "111", "1x1 ızgara, ilk alt alan" ve "234", "2x3 ızgara, 4. alt alan" anlamına gelir.

İçin alternatif formu add_subplot(111)DİR add_subplot(1, 1, 1).


18
Bununla ilgili ayrıntılı bir belge var mı? Bu bağlamda 1x1 ızgara ve 2x3 ızgara arasındaki fark nedir?
donatello

19
1x1 ızgara = 1 satır, 1 sütun. 2x3 ızgara = 2 satır, 3 sütun. Üçüncü sayı 1'den başlar ve önce satır artar. Daha fazla bilgi için subplot () belgelerine bakın.
Christian Alis

18
Diğerlerinin açıkladığı gibi (iki yıldan fazla bir süre önce), bu matlab'dan bir miras. Ancak gelecekteki okuyucular uğruna, subplots()yöntem şeklinde daha iyi bir alternatif olduğunu bilmelisiniz .
jarondl

26
Mirası Belgeleme subplot()olduğunu burada ve subplots()olduğunu burada .
crayzeewulf

511

Bunun en iyi aşağıdaki resim ile açıklanacağını düşünüyorum:

resim açıklamasını buraya girin

Yukarıdakileri başlatmak için aşağıdakiler yazılır:

import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(221)   #top left
fig.add_subplot(222)   #top right
fig.add_subplot(223)   #bottom left
fig.add_subplot(224)   #bottom right 
plt.show()

19
Virgül içeren sürümün 3 basamaklı sayılardan çok daha sezgisel ve okunabilir olduğunu düşünüyorum
endolith

Bu, yukarıda gösterilen örnekte olduğu gibi 2x2 ızgara veya 4x4 grafik ızgara gibi bir alt grafiklerin nasıl yerleştirileceğini gösterir. (2,2,1) için varsayılan Ben oldukça küçük bulmak istiyorum belki bu boyutu iki katına veya daha fazla.
yoshiserry

7
Bu oldukça faydalı. Bu resim, kare (2x2) değil, aksi takdirde çok yararlı olsaydı biraz daha hoş olurdu.
TravisJ

@TravisJ Vay be, ne tesadüf! Bunu yazmadan bir saat kadar önce aynı şeyi düşünüyordum! Yakında değiştireceğim :)
SaiyanGirl

7
Çok yardımcı cevap! Rağmen düzenleme yanlış. Alt grafikleri 1: 2 veya [1 3] gibi ifadelerle yayma davranışı Matplotlib tarafından desteklenmez (en azından içeride değil 1.5.0) ve sadece Matlab gibi görünüyor. (Matplotlib'de bu davranışı elde etmek için başka seçeneklerin de olduğunu unutmayın, örn. Gridspec )
lab

39

Constantin'in cevabı yerinde ancak daha fazla arka plan için bu davranış Matlab'dan miras alındı.

Matlab davranışı, Matlab belgelerinin Şekil Kurulumu - Şekil başına Birden Fazla Grafiği Görüntüleme bölümünde açıklanmaktadır.

subplot (m, n, i), şekil penceresini küçük alt alanların m-by-n matrisine böler ve geçerli çizim için alt grafiğini seçer. Grafikler, şekil penceresinin üst sırası boyunca, daha sonra ikinci sıra vb. Boyunca numaralandırılır.


2
Bu matplotlib, matlab değil.
dom0

45
Matplotlibs davranışının çoğu Matlab'dan miras alınır. Matlab belgeleri daha iyi olduğundan, bu özel işlev çağrısının nasıl davrandığını açıklamaya yardımcı olabileceğini düşündüm. Evet, haklısınız, bu (soru) matplotlib ile ilgilidir. Matplotlib subplot belgeleri Bence az açıktır.
DaveTM

7
MATLAB belgeleri taşındı .
dotancohen

20

Benim çözümüm

fig = plt.figure()
fig.add_subplot(1, 2, 1)   #top and bottom left
fig.add_subplot(2, 2, 2)   #top right
fig.add_subplot(2, 2, 4)   #bottom right 
plt.show()

1 ve 3 birleştirmeli 2x2 ızgara


15

resim açıklamasını buraya girin

import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
plt.subplot(3,2,1)
plt.subplot(3,2,3)
plt.subplot(3,2,5)
plt.subplot(2,2,2)
plt.subplot(2,2,4)

İlk kod, 3 satır ve 2 sütun içeren bir düzende ilk alt grafiği oluşturur.

İlk sütundaki üç grafik 3 satırı belirtir. İkinci grafik aynı sütundaki ilk grafiğin hemen altına gelir vb.

Son iki grafikte (2, 2), ikinci sütunun yalnızca iki satır olduğunu belirten bağımsız değişkenler vardır; konum parametreleri satır akıllıca hareket eder.


10

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW = satır sayısı
  • COLUMN = sütun sayısı
  • POSITION = çizdiğiniz grafiğin konumu

Örnekler

`fig.add_subplot(111)` #There is only one subplot or graph  
`fig.add_subplot(211)`  *and*  `fig.add_subplot(212)` 

Toplam 2 satır vardır, 1 sütun bu nedenle 2 alt grafik çizilebilir. Konumu 1'dir. Toplam 2 satır, 1 sütun vardır, bu nedenle 2 alt çizgi çizilebilir.


2

Add_subplot () metodu birkaç çağrı imzalarını vardır:

  1. add_subplot(nrows, ncols, index, **kwargs)
  2. add_subplot(pos, **kwargs)
  3. add_subplot(ax)
  4. add_subplot() <- 3.1.0'dan beri

Çağrı 1 ve 2:

1 ve 2 çağrıları birbiriyle aynı şeyi gerçekleştirir (aşağıda açıklanan bir sınıra kadar). Bunları ilk olarak ızgara düzenini ilk 2 numarasıyla (2x2, 1x8, 3x4, vb.) Belirtin, örn:

f.add_subplot(3,4,1) 
# is equivalent to:
f.add_subplot(341)

Her ikisi de 3 sıra ve 4 sütunda (3 x 4 = 12) alt parselin bir alt parsel düzenlemesini üretir. Her çağrıdaki üçüncü sayı , sol üstteki 1'den başlayarak sağa doğru hangi eksen nesnesinin geri döneceğini gösterir .

Bu kod, çağrı 2 kullanımının sınırlamalarını gösterir:

#!/usr/bin/env python3
import matplotlib.pyplot as plt

def plot_and_text(axis, text):
  '''Simple function to add a straight line
  and text to an axis object'''
  axis.plot([0,1],[0,1])
  axis.text(0.02, 0.9, text)

f = plt.figure()
f2 = plt.figure()

_max = 12
for i in range(_max):
  axis = f.add_subplot(3,4,i+1, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
  plot_and_text(axis,chr(i+97) + ') ' + '3,4,' +str(i+1))

  # If this check isn't in place, a 
  # ValueError: num must be 1 <= num <= 15, not 0 is raised
  if i < 9:
    axis = f2.add_subplot(341+i, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
    plot_and_text(axis,chr(i+97) + ') ' + str(341+i))

f.tight_layout()
f2.tight_layout()
plt.show()

subplots

LHS üzerindeki 1 numaralı çağrı ile herhangi bir eksen nesnesini döndürebilirsiniz, ancak RHS üzerindeki 2 numaralı çağrı ile bu çağrıyı kullanarak yalnızca indeks = 9 görüntü alt grafiklerini j), k) ve l) erişemezsiniz.

Yani bu noktayı dokümantasyondan göstermektedir:

pos, üç basamaklı bir tamsayıdır; burada, ilk basamak satır sayısı, ikincisi sütun sayısı ve üçüncüsü alt grafiğin dizini. yani fig.add_subplot (235), fig.add_subplot (2, 3, 5) ile aynıdır. Bu formun çalışması için tüm tamsayıların 10'dan küçük olması gerektiğini unutmayın .


Ara 3

Nadir durumlarda, add_subplot tek bir argümanla çağrılabilir, mevcut şekilde zaten oluşturulmuş, ancak şeklin eksen listesinde bulunmayan bir alt grafik eksen örneği.


4'ü arayın (3.1.0'dan beri):

Hiçbir konum bağımsız değişkeni iletilmezse, varsayılan olarak (1, 1, 1) kullanılır.

yani, fig.add_subplot(111)sorudaki çağrının çoğaltılması .

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.