Subtramas de diferentes tamaños de Matplotlib
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 GridSpec
y el colspan
argumento, pero me gustaría hacerlo usando figure
para poder guardar en PDF. Puedo ajustar la primera figura usando el figsize
argumento en el constructor, pero ¿cómo cambio el tamaño del segundo gráfico?
Aceptado
- A partir de
matplotlib 3.6.0
,width_ratios
yheight_ratios
ahora se puede pasar directamente como argumentos de palabras clave aplt.subplots
ysubplot_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
subplots
funció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.GridSpec
tienegridspect_kw
opciones 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')
- 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()
Puedes usar gridspec
y 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')