Je dois ajouter deux sous-plots à une figure. L'un d'eux doit être environ trois fois plus large que le second (même hauteur). J'ai réalisé cela en utilisant GridSpec
et l'argument colspan
mais j'aimerais le faire en utilisant figure
pour pouvoir enregistrer au format PDF. Je peux ajuster la première figure en utilisant l'argument figsize
dans le constructeur, mais comment puis-je changer la taille du second tracé ?
Vous pouvez utiliser gridspec
et 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')
![tracé résultant][1]
Le moyen le plus simple est probablement d'utiliser subplot2grid
, décrit dans [Personnaliser l'emplacement du sous-plot à l'aide de GridSpec][1].
ax = plt.subplot2grid((2, 2), (0, 0))
est égal à
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])
donc l'exemple de bmu devient:
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')
J'ai utilisé l'objet axes
de pyplot
'pour ajuster manuellement les tailles sans utiliser 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()