2010-08-27 5 views
333

volte mi venire attraverso il codice come questo:In Matplotlib, cosa significa l'argomento in fig.add_subplot (111)?

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

Che produce:

Example plot produced by the included code

Ho letto la documentazione come un matto, ma non riesco a trovare una spiegazione per la 111 . a volte vedo uno 212.

Che cosa significa l'argomento fig.add_subplot()?

risposta

325

Questi sono parametri della griglia di sottotrama codificati come un singolo numero intero. Ad esempio, "111" significa "griglia 1x1, primo sottotramma" e "234" significa "griglia 2x3, quarta sottotrama".

Il modulo alternativo per add_subplot(111) è add_subplot(1, 1, 1).

+14

Esiste una documentazione dettagliata su questo?In questo contesto, qual è la differenza tra una griglia 1x1 e una griglia 2x3? – donatello

+14

griglia 1x1 = 1 riga, 1 colonna. Griglia 2x3 = 2 righe, 3 colonne. Il terzo numero inizia da 1 e incrementa la riga-prima. Vedi la documentazione di subplot() per maggiori informazioni. – ianalis

+13

Come altri hanno spiegato (più di due anni fa), questo è un retaggio di Matlab. Ma per il futuro dei lettori, dovresti sapere che esiste un'alternativa migliore, nella forma del metodo 'subplots()'. – jarondl

30

La risposta di Constantin è azzeccata ma per ulteriori informazioni questo comportamento è ereditato da Matlab.

Il comportamento di Matlab è spiegato nella sezione Figure Setup - Displaying Multiple Plots per Figure della documentazione di Matlab.

sottotrama (m, n, i) rompe la finestra figura in una matrice m-by-n di piccole sottotrame e seleziona la sottotrama ithe per la stampa corrente. I grafici sono numerati lungo la riga superiore della finestra della figura, quindi la seconda riga e così via.

+2

Questo è matplotlib, non matlab. – dom0

+40

Gran parte del comportamento di matplotlib è ereditato da Matlab. Dal momento che la documentazione di Matlab era migliore, pensavo che potesse aiutare a spiegare come si comporta questa specifica funzione. Sì, sei corretto, questa (domanda) riguarda matplotlib. La [matplotlib subplot documentation] (http://matplotlib.sourceforge.net/api/axes_api.html?highlight=axessubplot#matplotlib.axes.SubplotBase) è meno chiara a mio parere. – DaveTM

+3

Punto preso :-) – dom0

384

penso che questo sarebbe meglio spiegata con il seguente quadro:

enter image description here

Per inizializzare quanto sopra, si potrebbe digitare:

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

EDIT: Alcune informazioni aggiuntive

Il seguito le combinazioni producono disposizioni asimmetriche di sottotrame.

subplot(2,2,[1 3]) 
subplot(2,2,2) 
subplot(2,2,4) 

Example 2

È anche possibile utilizzare l'operatore due punti per specificare più posizioni se sono in sequenza.

subplot(2,2,1:2) 
subplot(2,2,3) 
subplot(2,2,4) 

enter image description here

Riferimento here

+12

Penso che la versione con virgole sia molto più intuitiva e leggibile rispetto alla versione con numeri a 3 cifre – endolith

+0

Questo è bello mostra come "posizionare sottoquotazioni in una griglia" sia una griglia 2x2 come l'esempio sopra illustrato o una griglia di Grafici 4x4 ecc. Ma qualcuno può spiegare cosa determina la dimensione di quei grafici che vengono visualizzati. I valori predefiniti per (2,2,1) lo trovo abbastanza piccolo vorrei che raddoppiasse quella dimensione o più. – yoshiserry

+0

Si prega di qualcuno aggiungere questa risposta alla documentazione ufficiale, gee ... – alwbtc

3

La mia soluzione è

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

2x2 grid with 1 and 3 merge