Subtramas de diferentes tamaños de Matplotlib

Resuelto Jason Strimpel asked hace 12 años • 7 respuestas

Necesito agregar dos subtramas a una figura. Una subtrama debe ser aproximadamente tres veces más ancha que la segunda (misma altura). Logré esto usando GridSpecy el colspanargumento, pero me gustaría hacerlo usando figurepara poder guardar en PDF. Puedo ajustar la primera figura usando el figsizeargumento en el constructor, pero ¿cómo cambio el tamaño del segundo gráfico?

Jason Strimpel avatar May 01 '12 01:05 Jason Strimpel
Aceptado
  • A partir de matplotlib 3.6.0, width_ratiosy height_ratiosahora se puede pasar directamente como argumentos de palabras clave a plt.subplotsy subplot_mosaic, según Novedades de Matplotlib 3.6.0 (15 de septiembre de 2022) .

f, (a0, a1) = plt.subplots(1, 2, width_ratios=[3, 1])

f, (a0, a1, a2) = plt.subplots(3, 1, height_ratios=[1, 1, 3])


  • Otra forma es usar la subplotsfunción y pasar la relación de ancho congridspec_kw
    • Tutorial de matplotlib: Personalización de diseños de figuras usando GridSpec y otras funciones
    • matplotlib.gridspec.GridSpectiene gridspect_kwopciones disponibles
import numpy as np
import matplotlib.pyplot as plt 

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
f, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})
a0.plot(x, y)
a1.plot(y, x)

f.tight_layout()
f.savefig('grid_figure.pdf')

ingrese la descripción de la imagen aquí

  • Como la pregunta es canónica, aquí hay un ejemplo con subtramas verticales.
# plot it
f, (a0, a1, a2) = plt.subplots(3, 1, gridspec_kw={'height_ratios': [1, 1, 3]})

a0.plot(x, y)
a1.plot(x, y)
a2.plot(x, y)

f.tight_layout()

ingrese la descripción de la imagen aquí

Hagne avatar Mar 09 '2016 01:03 Hagne

Puedes usar gridspecy figure:

import numpy as np
import matplotlib.pyplot as plt 
from matplotlib import gridspec

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) 
ax0 = plt.subplot(gs[0])
ax0.plot(x, y)
ax1 = plt.subplot(gs[1])
ax1.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.pdf')

ingrese la descripción de la imagen aquí

bmu avatar May 02 '2012 09:05 bmu