subplots how gridspec_kw python numpy matplotlib plot

how - subplot title python



comprender matplotlib.subplots python (1)

Los diferentes tipos de retorno se deben al argumento de la palabra clave squeeze a plt.subplots() que se establece en True de forma predeterminada. Mejoremos la documentación con los respectivos desempaques:

apretar: bool, opcional, predeterminado: verdadero

  • Si es verdadero, las dimensiones adicionales se extraen del objeto Axes devuelto:

    • si solo se construye una subtrama (nrows = ncols = 1), el objeto Axes único resultante se devuelve como un escalar.
      fig, ax = plt.subplots()
    • para subtramas Nx1 o 1xN, el objeto devuelto es una matriz de objetos nudosos 1D de los objetos Axes que se devuelven como matrices 1D numpy.
      fig, (ax1, ..., axN) = plt.subplots(nrows=N, ncols=1) (para Nx1)
      fig, (ax1, ..., axN) = plt.subplots(nrows=1, ncols=N) (para 1xN)
    • para NxM, las subtramas con N> 1 y M> 1 se devuelven como matrices 2D.
      fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)
  • Si es Falso, no se realiza ninguna compresión: el objeto Axes devuelto siempre es una matriz 2D que contiene instancias de Axes, incluso si termina siendo 1x1.
    fig, ((ax,),) = plt.subplots(nrows=1, ncols=1, squeeze=False)
    fig, ((ax,), .. ,(axN,)) = plt.subplots(nrows=N, ncols=1, squeeze=False) para Nx1
    fig, ((ax, .. ,axN),) = plt.subplots(nrows=1, ncols=N, squeeze=False) para 1xN
    fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)

Alternativamente, siempre puede usar la versión desempaquetada

fig, ax_arr = plt.subplots(nrows=N, ncols=M, squeeze=False)

e indexe la matriz para obtener los ejes, ax_arr[1,2].plot(..) .

Por lo tanto, para una cuadrícula de 2 x 3 en realidad no importaría si configuras squeeze a False . El resultado siempre será una matriz 2D. Puedes desempacarlo como

fig, ((ax1, ax2, ax3),(ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3)

tener ax{i} como objetos matplotlib axes, o puede usar la versión empaquetada

fig, ax_arr = plt.subplots(nrows=2, ncols=3) ax_arr[0,0].plot(..) # plot to first top left axes ax_arr[1,2].plot(..) # plot to last bottom right axes

Con un poco de ayuda, he construido un conjunto de gráficos circulares. Insertar imagen en el corte de gráfico circular. Mis gráficos se ven maravillosos, ahora necesito colocar los 6 en una figura de 2x3 con marcas de verificación comunes en los ejes X e Y compartidos. Para comenzar, estoy buscando subtramas y pensé que podría hacer que funcione. Descargué algunos ejemplos y comencé a probar algunas cosas.

f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True))#, #squeeze=False, subplot_kw=None, gridspec_kw=None)) print(type(f),''/n'',type(a),''/n'')#,type(b))

rendimientos:

clase ''matplotlib.figure.Figure''

clase ''matplotlib.axes._subplots.AxesSubplot''

mientras:

f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None)) print(type(f),''/n'',type(a),''/n'')#,type(b))

devoluciones:

clase ''matplotlib.figure.Figure''

clase ''numpy.ndarray''

Cuando hago esto:

f, (a,b) = (plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None)) print(type(f),''/n'',type(a),''/n'',type(b))

Obtengo resultados similares, sin embargo, si nrows = 1 y ncols = 2 obtengo un error:

f, (a,b) = (plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None)) print(type(f),''/n'',type(a),''/n'',type(b))

ValueError: valores insuficientes para desempaquetar (esperado 2, obtenido 1)

pero de nuevo esto:

f, (a , b) = ( plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True))#, #squeeze=False, subplot_kw=None, gridspec_kw=None)) print(type(f),''/n'',type(a),''/n'',type(b))

da la clase ''matplotlib.figure.Figure''

clase ''matplotlib.axes._subplots.AxesSubplot''

clase ''matplotlib.axes._subplots.AxesSubplot''

¿Por qué es o matriz o ejes, y también por qué funciona un 2X1 y un 1X2 no? Deseo al cielo poder entender mejor la documentación. Gracias.