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

5 minutos de lectura

avatar de usuario de pleasedontbelong
complacido no pertenecer

A veces me encuentro con un código como este:

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:

Gráfico de ejemplo producido por el código incluido

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

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

  • Hola. ¿Ha encontrado una respuesta que significa fig.add_subplot(111) por favor?

    – Avv

    28 de noviembre de 2021 a las 20:33

Avatar de usuario de SaiyanGirl
SaiyajinNiña

Creo que esto se explicaría mejor con la siguiente imagen:

ingrese la descripción de la imagen aquí

Para inicializar lo anterior, uno escribiría:

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

  • 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

    – endolito

    11 de abril de 2014 a las 14:19

  • Esto es genial, muestra cómo “posicionar subparcelas en una cuadrícula”, ya sea una cuadrícula de 2×2 como el ejemplo ilustrado anteriormente o una cuadrícula de gráficos de 4×4, etc. Pero, ¿alguien puede explicar qué determina el tamaño de los gráficos que se muestran? Los valores predeterminados para (2,2,1) los encuentro bastante pequeños. Me gustaría que tal vez duplicaran ese tamaño o más.

    – yoshiserry

    2 de diciembre de 2014 a las 0:19

  • Esto es bastante útil. Esta imagen sería un poco mejor si no fuera cuadrada (2×2), pero por lo demás muy útil.

    – TravisJ

    6 de marzo de 2015 a las 18:16

  • @TravisJ ¡Guau, qué coincidencia! ¡Estaba pensando exactamente lo mismo una hora antes de que escribieras eso! Lo cambiaré pronto 🙂

    – Chica Saiyajin

    06/03/2015 a las 22:58

  • ¡Respuesta muy útil! Aunque creo que la edición es inexacta. El comportamiento para abarcar subtramas con declaraciones como 1:2 o [1 3] no es compatible con Matplotlib (al menos no en 1.5.0), y parece ser solo Matlab. (Tenga en cuenta que hay otras opciones en Matplotlib para lograr este comportamiento, por ejemplo especificación de cuadrícula )

    – laboratorio

    31 de marzo de 2016 a las 8:14

Estos son parámetros de cuadrícula de subtrama codificados como un solo número entero. Por ejemplo, “111” significa “cuadrícula 1×1, primera subtrama” y “234” significa “cuadrícula 2×3, cuarta subtrama”.

Forma alternativa para add_subplot(111) es add_subplot(1, 1, 1).

  • ¿Hay alguna documentación detallada sobre esto? ¿Cuál es la diferencia entre una cuadrícula de 1×1 y una cuadrícula de 2×3 en este contexto?

    – donatello

    30 de noviembre de 2010 a las 12:34

  • Cuadrícula 1×1 = 1 fila, 1 columna. Cuadrícula 2×3 = 2 filas, 3 columnas. El tercer número comienza desde 1 y aumenta la fila primero. Consulte la documentación de subplot() para obtener más información.

    – Christian Alis

    2 de febrero de 2011 a las 16:54

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

    – jarondl

    15 de noviembre de 2012 a las 14:30

  • Documentación de legado subplot() es aquí y subplots() es aquí.

    – crayzeewulf

    24 de octubre de 2014 a las 4:41

Avatar de usuario de DaveTM
DaveTM

La respuesta de Constantin es acertada, pero para obtener más información, este comportamiento se hereda de Matlab.

El comportamiento de Matlab se explica en el Configuración de figura: visualización de varios gráficos por figura sección de la documentación de Matlab.

subplot(m,n,i) divide la ventana de la figura en una matriz m-by-n de pequeñas subtramas y selecciona la ithe subtrama para la trama actual. Los gráficos están numerados en la fila superior de la ventana de la figura, luego en la segunda fila y así sucesivamente.

  • Esto es matplotlib, no matlab.

    – dom0

    12 mayo 2012 a las 18:50

  • Gran parte del comportamiento de matplotlibs se hereda de Matlab. Dado que la documentación de Matlab era mejor, pensé que podría ayudar a explicar cómo se comporta esta llamada de función específica. Sí, tiene razón, esta (pregunta) se refiere a matplotlib. los documentación de la trama secundaria de matplotlib es menos claro en mi opinión.

    – Dave™

    24 de mayo de 2012 a las 7:55


  • La documentación de MATLAB se ha movido.

    – dotancohen

    8 de diciembre de 2014 a las 11:12

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

Cuadrícula de 2x2 con fusión 1 y 3

Avatar de usuario de Pritz
Pritz

ingrese la descripción de la imagen aquí

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)

El primer código crea la primera subparcela en un diseño que tiene 3 filas y 2 columnas.

Los tres gráficos en la primera columna denotan las 3 filas. La segunda parcela viene justo debajo de la primera parcela en la misma columna y así sucesivamente.

Las dos últimas tramas tienen argumentos. (2, 2) denotando que la segunda columna tiene solo dos filas, los parámetros de posición se mueven por fila.

Avatar de usuario de Chabo
Chabo

fig.add_subplot(ROW,COLUMN,POSITION)

  • FILA=número de filas
  • COLUMNA=número de columnas
  • POSICIÓN= posición del gráfico que está trazando

Ejemplos

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

Hay un total de 2 filas, 1 columna, por lo tanto, se pueden trazar 2 subgráficos. Su ubicación es 1ra. Hay un total de 2 filas, 1 columna, por lo tanto, se pueden trazar 2 subgráficos. Su ubicación es la segunda

los añadir_subtrama() El método tiene varias firmas de llamada:

  1. add_subplot(nrows, ncols, index, **kwargs)
  2. add_subplot(pos, **kwargs)
  3. add_subplot(ax)
  4. add_subplot()

Llamadas 1 y 2:

Las llamadas 1 y 2 logran lo mismo entre sí (hasta un límite, que se explica a continuación). Piense en ellos como los primeros en especificar el diseño de la cuadrícula con sus primeros 2 numeros (2×2, 1×8, 3×4, etc), por ejemplo:

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

Ambos producen un arreglo de subparcelas de (3 x 4 = 12) subparcelas en 3 filas y 4 columnas. los tercer numero en cada llamada indica qué objeto de eje devolver, a partir de 1 en la parte superior izquierda, aumentando a la derecha.

Este código ilustra las limitaciones de usar la llamada 2:

#!/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()

subtramas

Puedes ver con llamar 1 en el LHS puede devolver cualquier objeto de eje, sin embargo, con llamar 2 en el RHS solo puede regresar hasta index = 9 representando las subparcelas j), k) y l) inaccesibles usando esta llamada.

es decir ilustra este punto de la documentación:

pos es un número entero de tres dígitos, donde el primer dígito es el número de filas, el segundo el número de columnas y el tercero el índice de la subparcela. es decir, fig.add_subplot(235) es lo mismo que fig.add_subplot(2, 3, 5). Tenga en cuenta que todos los números enteros deben ser menores que 10 para que este formulario funcione.


Llamada 3

En raras circunstancias, se puede llamar a add_subplot con un solo argumento, una instancia de ejes de subtrama ya creada en la figura actual pero no en la lista de ejes de la figura.


Llamada 4 (desde 3.1.0):

Si no se pasan argumentos posicionales, el valor predeterminado es (1, 1, 1).

es decir, reproducir la llamada fig.add_subplot(111) en la pregunta Básicamente, esto configura una cuadrícula de 1 x 1 de subparcelas y devuelve el primer (y único) objeto de eje en la cuadrícula.

¿Ha sido útil esta solución?