Necesito añadir dos subparcelas a una figura. Uno de los subplots debe ser aproximadamente tres veces más ancho que el segundo (con la misma altura). He conseguido esto usando GridSpec
y el argumento colspan
pero me gustaría hacerlo usando figure
para poder guardar en PDF. Puedo ajustar la primera figura usando el argumento figsize
en el constructor, pero ¿cómo puedo cambiar el tamaño del segundo gráfico?
Puede utilizar 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')
Probablemente la forma más sencilla es utilizar subplot2grid
, descrito en Personalización de la ubicación del subplot mediante GridSpec.
ax = plt.subplot2grid((2, 2), (0, 0))
es igual a
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])
así que el ejemplo de bmu's se convierte en:
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
fig = plt.figure(figsize=(8, 6))
ax0 = plt.subplot2grid((1, 3), (0, 0), colspan=2)
ax0.plot(x, y)
ax1 = plt.subplot2grid((1, 3), (0, 2))
ax1.plot(y, x)
plt.tight_layout()
plt.savefig('grid_figure.pdf')
Utilicé el objeto pyplot
's ejes
para ajustar manualmente los tamaños sin utilizar GridSpec
:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.2)
y = np.sin(x)
# definitions for the axes
left, width = 0.07, 0.65
bottom, height = 0.1, .8
bottom_h = left_h = left+width+0.02
rect_cones = [left, bottom, width, height]
rect_box = [left_h, bottom, 0.17, height]
fig = plt.figure()
cones = plt.axes(rect_cones)
box = plt.axes(rect_box)
cones.plot(x, y)
box.plot(y, x)
plt.show()