Je dois ajouter deux sous-parcelles à une figure. Une sous-parcelle doit être environ trois fois plus large que la seconde (même hauteur). J'ai accompli ceci en utilisant GridSpec
et l'argument colspan
mais j'aimerais le faire en utilisant figure
afin de pouvoir enregistrer au format PDF. Je peux ajuster le premier chiffre à l'aide de l'argument figsize
du constructeur, mais comment puis-je modifier la taille du deuxième tracé?
Une autre méthode consiste à utiliser la fonction subplots
et à transmettre le rapport de largeur avec gridspec_kw
:
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')
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')
Le moyen le plus simple est probablement d'utiliser subplot2grid
, décrit dans la section Personnalisation de l'emplacement de la sous-parcelle à l'aide de GridSpec .
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])
ainsi, 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 pyplot
de axes
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()