web-dev-qa-db-fra.com

Comment faire deux parcelles côte à côte en utilisant Python?

J'ai trouvé l'exemple suivant sur matplotlib:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

Ma question est la suivante: que dois-je changer, pour que les parcelles soient côte à côte?

60
Heißenberg93

Modifiez les paramètres de votre sous-parcelle pour:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Les paramètres de subplot sont les suivants: nombre de lignes, nombre de colonnes et sous-parcelle sur laquelle vous vous trouvez. Donc, 1, 2, 1 signifie "une figure à 1 ligne, 2 colonnes: allez à la première sous-parcelle." Alors, 1, 2, 2 signifie "une figure à 1 ligne, 2 colonnes: allez à la deuxième sous-parcelle."

Vous demandez actuellement une mise en page à 2 lignes, 1 colonne (une sur l'autre). Vous devez plutôt demander une mise en page à 1 colonne et 2 colonnes. Quand vous le ferez, le résultat sera:

side by side plot

Afin de minimiser le chevauchement des sous-parcelles, vous pouvez lancer un:

plt.tight_layout()

avant le spectacle. Rendement:

neater side by side plot

100
Jonathan Eunice

Consultez cette page: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplots est similaire. Je pense que c'est mieux puisqu'il est plus facile de définir les paramètres de la figure. Les deux premiers arguments définissent la présentation (dans votre cas, 1 ligne, 2 colonnes), et d'autres paramètres modifient des fonctionnalités telles que la taille de la figure:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

enter image description here

5
busybear