¿Cómo cambio el tamaño de la figura con subparcelas?

444

Encontré este ejemplo en el sitio web de Matplotlib. Me preguntaba si era posible aumentar el tamaño de la figura.

Lo intenté con

f.figsize(15,15)

pero no hace nada.

827

Si ya tiene el objeto figura, use:

f.set_figheight(15)
f.set_figwidth(15)

Pero si usa el comando .subplots () (como en los ejemplos que está mostrando) para crear una nueva figura, también puede usar:

f, axs = plt.subplots(2,2,figsize=(15,15))
11
  • 19
    También hay fig.set_size_inchesque establecer la altura y el ancho juntos. 8 de febrero de 2013 a las 12:26
  • 4
    Esto no funciona, puedes ajustar la altura a lo que quieras, pero nunca será más grande que tu monitor.
    user3417220
    7/07/2017 a las 16:29
  • 3
    Esto no tiene que ver con su monitor. ¿Qué pasa si imprime en un png? ¿Estás diciendo que nunca puede ser más grande que la resolución de la pantalla? Es la combinación del tamaño en pulgadas con el dpi lo que determina el tamaño en píxeles. 8 de julio de 2017 a las 16:07
  • 3
    incluir figsize en la llamada a subplots () no parece funcionar. Sin embargo, llamar a f.set_figheight funciona.
    Vicki B
    18/10/19 a las 17:33
  • 2
    @BenButterworth, se incluye en la **fig_kwparte a la que se transmiten pyplot.figure. 1 de septiembre de 2020 a las 8:37
55

Alternativamente, cree un figure()objeto usando el figsizeargumento y luego use add_subplotpara agregar sus subtramas. P.ej

import matplotlib.pyplot as plt
import numpy as np

f = plt.figure(figsize=(10,3))
ax = f.add_subplot(121)
ax2 = f.add_subplot(122)
x = np.linspace(0,4,1000)
ax.plot(x, np.sin(x))
ax2.plot(x, np.cos(x), 'r:')

Ejemplo simple

Los beneficios de este método son que la sintaxis se acerca más a las llamadas de en subplot()lugar de subplots(). Por ejemplo, las subtramas no parecen admitir el uso de a GridSpecpara controlar el espaciado de las subtramas, pero ambos subplot()y lo add_subplot()hacen.

2
  • 14
    ¿Alguna posibilidad de agregar 'tamaño' a ax y ax2 por separado? 24 de mayo de 2018 a las 9:29
  • 3
    Si entiendo correctamente, ¿desea establecer el tamaño relativo de los dos ejes? En ese caso, creo que está buscando esta pregunta: stackoverflow.com/questions/10388462/… 26 de mayo de 2018 a las 1:33
19

Además de las respuestas anteriores, aquí hay una opción para establecer el tamaño de la figura y el tamaño de las subparcelas dentro de la figura individualmente mediante gridspec_kw:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

#generate random data
x,y=range(100), range(10)
z=np.random.random((len(x),len(y)))
Y=Y=[z[i].sum() for i in range(len(x))]
z=pd.DataFrame(z).unstack().reset_index()

#Plot data
fig, axs = plt.subplots(2,1,figsize=(16,9), gridspec_kw={'height_ratios': [1, 2]})
axs[0].plot(Y)
axs[1].scatter(z['level_1'], z['level_0'],c=z[0])

con esta figura como resultado: ingrese la descripción de la imagen aquí

0

Para trazar subplotsen un, lo for loopque a veces es útil: Código de muestra para un matplotlibgráfico de múltiples subtramas de histogramas de a multivariate numpy array(bidimensional).

plt.figure(figsize=(16, 8)) 
for i in range(1, 7):
    plt.subplot(2, 3, i)
    plt.title('Histogram of {}'.format(str(i)))
    plt.hist(x[:,i-1], bins=60)