2010-08-27 18 views
333

A veces me encuentro con un código como este:En Matplotlib, ¿qué significa el argumento en 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() 

que produce:

Example plot produced by the included code

He estado leyendo la documentación como un loco, pero no puedo encontrar una explicación para la 111 . a veces veo un 212.

¿Qué significa el argumento de fig.add_subplot()?

Respuesta

325

Estos son los parámetros de la cuadrícula secundaria codificados como un entero único. Por ejemplo, "111" significa "cuadrícula 1x1, primera subparcela" y "234" significa "cuadrícula 2x3, 4ta subparcela".

La forma alternativa para add_subplot(111) es add_subplot(1, 1, 1).

+14

¿Hay alguna documentación detallada acerca de esto?¿Cuál es la diferencia entre una cuadrícula de 1x1 y una de 2x3 en este contexto? – donatello

+14

cuadrícula 1x1 = 1 fila, 1 columna. Rejilla 2x3 = 2 filas, 3 columnas. El tercer número comienza desde 1 e incrementa la fila primero. Consulte la documentación de la subtrama() para obtener más información. – ianalis

+13

Como otros explicaron (hace más de dos años), este es un legado de matlab. Pero por el bien de los futuros lectores, deben saber que existe una mejor alternativa, en la forma del método 'subplots()'. – jarondl

30

La respuesta de Constantin es perfecta, pero para obtener más antecedentes, este comportamiento se hereda de Matlab.

El comportamiento de Matlab se explica en la sección Figure Setup - Displaying Multiple Plots per Figure de la documentación de Matlab.

trama secundaria (m, n, i) rompe la ventana de la figura en una matriz m por n de pequeñas subtramas y selecciona la trama secundaria Ithe para la trama actual. Las gráficas están numeradas a lo largo de la fila superior de la ventana de figura, luego la segunda fila , y así sucesivamente.

+2

Esto es matplotlib, no matlab. – dom0

+40

Gran parte del comportamiento matplotlibs se hereda de Matlab. Como la documentación de Matlab fue mejor, pensé que podría ayudar a explicar cómo se comporta esta llamada de función específica. Sí, estás en lo cierto, esta (pregunta) es sobre matplotlib. La [documentación de subplot de matplotlib] (http://matplotlib.sourceforge.net/api/axes_api.html?highlight=axessubplot#matplotlib.axes.SubplotBase) es menos clara en mi opinión. – DaveTM

+3

Punto tomado :-) – dom0

384

creo que esto se explica mejor por la siguiente imagen:

enter image description here

Para inicializar lo anterior, se debe teclear:

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: Parte de la información adicional

El siguiente las combinaciones de ing producen arreglos asimétricos de subparcelas.

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

Example 2

También puede utilizar el operador de dos puntos para especificar varias ubicaciones si están en secuencia.

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

enter image description here

Referencia here

+12

Creo que la versión con comas es mucho más intuitiva y legible que la versión con números de 3 dígitos – endolith

+0

Esto es genial, muestra cómo "posicionar subtramas en una cuadrícula" ya sea una cuadrícula de 2x2 como el ejemplo ilustrado o una grilla de Gráficos 4x4, etc. Pero, ¿alguien puede explicar qué determina el tamaño de esos gráficos que se muestran? Los valores predeterminados para (2,2,1) me parecen bastante pequeños. Me gustaría que duplicaran ese tamaño o más. – yoshiserry

+0

Por favor alguien agregue esta respuesta a la documentación oficial, gee ... – alwbtc

3

Mi solución es

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