Matplotlib - plt.show () sur l'objet graphique
J'ai un exemple très simple ici. Je fais un tracé à partir d'un objet hache retourné par une fonction:
import matplotlib.pyplot as plt
x = ['a', 'b', 'c']
y = [1, 2, 3]
def make_plot():
fig, ax = plt.subplots()
ax.set_title('test bar chart')
return ax
chart = make_plot()
chart.bar(x, y)
plt.show() #why does this show the chart?
Ma question concerne plt.show () à la fin. Évidemment, cela montre la sortie du graphique. Mais pourquoi? Pour moi, il ne semble pas que plt.show () soit lié à quoi que ce soit. J'ai mon chartobjet, qui contient mon graphique avec tous ses paramètres et ainsi de suite. Mais comment plt.show () sait-il interagir avec cela? Il semblerait plus intuitif d'avoir quelque chose comme chart.show(), tout comme chartl'instance de classe.
Réponses
Bonne question! chartest un Axes créé lorsque vous appelez plt.subplots(). Pyplot est ce qu'on appelle une API "avec état". Lorsque vous appelez les fonctions plt. *, Cela change l'état interne de pyplot et cela peut affecter les appels futurs. Lorsque vous appelez plt.subplots(), il sait qu'il y a une figure nouvellement créée avec des axes de sous-tracé nouvellement créés à l'intérieur.
De même, si vous appelez plt.plot(), il a un enregistrement stocké des axes les plus récents et trace les données sur ce tracé.
Jetez un œil au code source pyplot et vous pouvez voir comment il a une managervariable globale qu'il utilise pour stocker le tracé actuel, et le met à jour managerlorsque vous créez un tracé.
De plus, il y en a Figure.show(). Si vous voulez contourner pyplot, cela ressemble à quelque chose comme ça