Je suis un peu confus sur le fonctionnement de ce code:
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
Comment les figues, les axes fonctionnent-ils dans ce cas? Qu'est ce que ça fait?
Aussi, pourquoi cela ne fonctionnerait-il pas de faire la même chose:
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
Il y a plusieurs façons de le faire. La méthode subplots
crée la figure avec les sous-graphes qui sont ensuite stockés dans le tableau ax
. Par exemple:
import matplotlib.pyplot as plt
x = range(10)
y = range(10)
fig, ax = plt.subplots(nrows=2, ncols=2)
for row in ax:
for col in row:
col.plot(x, y)
plt.show()
Cependant, quelque chose comme cela fonctionnera aussi, ce n'est pas si "propre" bien que vous créez une figure avec des sous-graphes et que vous les ajoutiez ensuite:
fig = plt.figure()
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.subplot(2, 2, 4)
plt.plot(x, y)
plt.show()
lisez la documentation: matplotlib.pyplot.subplots
pyplot.subplots()
renvoie un tuple fig, ax
qui est décompressé en deux variables à l'aide de la notation
fig, axes = plt.subplots(nrows=2, ncols=2)
le code
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
ne fonctionne pas parce que subplots()
est une fonction dans pyplot
qui n'est pas membre de l'objet Figure
.
Vous pourriez être intéressé par le fait que depuis la version 2.1 de matplotlib, le deuxième code de la question fonctionne également.
Depuis le journal des modifications :
La classe Figure a maintenant une méthode de sous-parcelles La classe Figure a maintenant une méthode de sous-parcelles () qui se comporte de la même façon que pyplot.subplots () mais sur une figure existante.
Exemple:
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
plt.show()
Vous pouvez également décompresser les axes dans l'appel des sous-parcelles.
Et définir si vous souhaitez partager les axes x et y entre les sous-parcelles
Comme ça:
import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()