Matplotlib - plt.show () für Diagrammobjekt

Aug 28 2020

Ich habe hier ein wirklich einfaches Beispiel. Ich mache einen Plot aus einem Axtobjekt, das von einer Funktion zurückgegeben wurde:

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?

Meine Frage bezieht sich am Ende auf plt.show (). Dies zeigt offensichtlich die Ausgabe des Diagramms. Aber wieso? Für mich scheint plt.show () an nichts gebunden zu sein. Ich habe mein chartObjekt, das mein Diagramm mit all seinen Parametern und so weiter enthält. Aber woher weiß plt.show (), damit zu interagieren? Es wäre intuitiver scheint so etwas wie zu haben chart.show(), wie chartdie Klasseninstanz ist.

Antworten

2 Keon Aug 28 2020 at 01:42

Gute Frage! chartist eine Achse, die beim Aufrufen erstellt wird plt.subplots(). Pyplot ist eine sogenannte "Stateful" -API. Wenn Sie plt. * -Funktionen aufrufen, ändert sich der interne Status von pyplot. Dies kann sich auf zukünftige Aufrufe auswirken. Wenn Sie anrufen plt.subplots(), wird bekannt, dass sich eine neu erstellte Figur mit neu erstellten Nebenplotachsen befindet.

Wenn Sie aufrufen plt.plot(), wird ein Datensatz mit den neuesten Achsen gespeichert und die Daten in diesem Diagramm werden aufgezeichnet.

Werfen Sie einen Blick auf den Pyplot-Quellcode und sehen Sie, wie er eine globale managerVariable enthält, die zum Speichern des aktuellen Plots verwendet wird, und aktualisieren Sie diese managerbeim Erstellen eines Plots.

Zusätzlich gibt es Figure.show(). Wenn Sie Pyplot umgehen möchten, sieht es ungefähr so ​​aus