Matplotlib - plt.show () sur l'objet graphique

Aug 28 2020

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

2 Keon Aug 28 2020 at 01:42

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