web-dev-qa-db-fra.com

Comment obtenir plusieurs intrigues secondaires dans matplotlib?

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)
88
bugsyb

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()

enter image description here

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()

enter image description here

129
user2489252
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

enter image description here

21
Khalil Al Hooti

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.

9
Diziet Asahi

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()

7
Colin Anthony