Je dois ajouter deux intrigues secondaires à une figure. L'un des sous-plots doit être environ trois fois plus large que le second (même hauteur). Pour ce faire, j'ai utilisé GridSpec
et le colspan
mais je voudrais le faire en utilisant figure
pour que je puisse sauvegarder en PDF. Je peux ajuster la première figure en utilisant le figsize
dans le constructeur, mais comment puis-je changer la taille du second tracé ?
Réponses
Trop de publicités?-
Une autre façon est d'utiliser le
subplots
et passer le rapport de largeur avecgridspec_kw
- Tutoriel matplotlib : Personnaliser la disposition des figures en utilisant GridSpec et d'autres fonctions
-
matplotlib.gridspec.GridSpec
est disponiblegridspect_kw
options
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')
-
Comme la question est canonique, voici un exemple avec des sous-intrigues 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()
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')
J'ai utilisé pyplot
's 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()
Le moyen le plus simple est probablement d'utiliser subplot2grid
décrit dans Personnalisation de l'emplacement du sous-graphe à 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])
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')