[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann

Pyplot, ein Modul zum Zeichnen von Grafiken, wird manchmal erledigt, aber ich war nicht daran gewöhnt. Ich habe es in letzter Zeit endlich geschafft, diesen Dunst zu beseitigen, also werde ich ihn als Hinweis auf mein Bewusstsein hinterlassen.

Wo ich persönlich nicht verstanden habe

Erstens ist die grundlegende Grafikausgabe.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-np.pi, np.pi)
y = np.sin(x)

fig = plt.figure()
plt.plot(x, y)
plt.title("y = sin(x)")
plt.xlabel("x")
plt.ylabel("y")
fig.savefig("output.png ")

output.png

Damit wird das Bild als output.png ausgegeben, aber persönlich ist mir das Verhalten zu diesem Zeitpunkt nicht in den Sinn gekommen. Zum Beispiel

(Ich dachte übrigens nicht, dass "title ()" und "xlabel ()" Klassenmethoden sind). Persönlich bin ich an den Ablauf der Instanziierung → Methodenaufruf gewöhnt, daher hätte ich ohne zu zögern verstanden, wenn die Methode wie folgt wäre.

#Dies funktioniert nicht richtig.
import matplotlib
import numpy as np

x = np.linspace(-np.pi, np.pi)
y = np.sin(x)

plt = matplotlib.pyplot() #Ich möchte, dass Sie hier eine Instanz erstellen
plt.plot(x, y)
plt.title("y = sin(x)")
plt.xlabel("x")
plt.ylabel("y")
plt.figure.savefig("output.png ") #Ich möchte, dass dies eine Methode der plt-Instanz ist

Warum ist es überhaupt erfolgreich? Und warum funktioniert es nicht so, wie ich es mir vorgestellt habe?

Was ist wirklich los?

Finden Sie heraus, wer jedes der Elemente im ersten Arbeitsskript ist (lassen Sie den numpy-Teil weg).

Wichtig ist, dass ** plt ein Modul ** ist, keine Klasse. Wenn plt eine Klasse wäre, möchte ich, dass Sie irgendwo eine Instanz erstellen, aber da sie bereits beim Importieren in der zweiten Zeile erstellt wurde, weil es sich um ein Modul handelt, ist fig = plt.figure () undplötzlich Mit plt.plot (x, y)hat es gut funktioniert. Dies ist ebenfalls eine Spekulation, aber es scheint, dass andere Fragen überzeugt werden können, wenn Sie der Meinung sind, dass das Zugriffsziel in plt aktualisiert wird, wenn die fig-Instanz erstellt wird.

Bonus

In Python werden Module jetzt als Singletons erstellt, sodass sie auf Objekte mit derselben ID verweisen, unabhängig davon, wo sie aufgerufen werden. Wenn Sie "pyplot" an einer anderen Stelle aufrufen, können Sie daher weiterhin auf die bereits erstellten Diagramme zugreifen.

Angenommen, die folgenden zwei Dateien befinden sich im selben Verzeichnis:

graph.py


import matplotlib.pyplot as plt
import numpy as np

def edit_graph():
    x = np.linspace(-np.pi, np.pi)
    y = np.sin(x)

    plt.plot(x, y)
    plt.title("y = sin(x)")
    plt.xlabel("x")
    plt.ylabel("y")

main.py


import matplotlib.pyplot as plt_main
import graph

graph.edit_graph()
plt_main.show()

Wenn Sie in diesem Zustand "python main.py" ausführen, wird derselbe Sinusgraph wie zuvor ausgegeben. Mit anderen Worten, es ist möglich, ein in einer Skriptdatei generiertes / bearbeitetes Diagramm in einer anderen Skriptdatei auszugeben, ohne eine Instanz zu erstellen / zu übergeben (obwohl dies vom Design nicht empfohlen wird). Sie können die Methode "savefig ()" auch in der Klasse "matplotlib.figure.Figure" aufrufen, nachdem Sie "fig = pyplot.figure ()" ausgeführt haben.

Zusammenfassung

Der Hauptgrund für diese Frage war, dass ich "plt" als eine Art Klasse oder Instanz missverstanden habe. Ich weiß nicht, warum ich das jetzt gedacht habe ... Es ist keine große Sache, wenn Sie erkennen, dass plt ein Modul ist, aber ich denke, es wird besser verstanden, wenn Sie noch einmal darüber nachdenken. ..

Zum Schluss noch eine Zusammenfassung dessen, was mir diesmal aufgefallen ist.

--pyplot ist ein Modul und wird normalerweise mit einem Namen wie plt verwendet.

Recommended Posts

[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
[Python] Hinweis: Selbst erstellte Funktion zum Ermitteln des Bereichs der Normalverteilung
[Python] Ein Programm, das die Anzahl der Täler zählt
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
14 Tests, um den überraschend verwirrenden Umfang von Python zu verstehen
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Hinweis zum Standardverhalten von collate_fn in PyTorch
Erleichtern Sie die Anzeige von Python-Modulausnahmen
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Python-Skript, das den Status des Servers über den Browser überprüfen kann
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Ein Skript, das 0, 1 an die erste Python-Primzahl zurückgibt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Überprüfen Sie das Verhalten des Zerstörers in Python
[Python3] Verstehe die Grundlagen von Beautiful Soup
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Python Hinweis: Die geheime Rolle von Kamma
[Python] Ein Programm, das die Partitur rundet
[Python3] Grundlegendes zu Dateivorgängen
Ich bin verblüfft über das Verhalten von filter () aufgrund verschiedener Versionen von Python
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Ein Hinweis zu den Funktionen der Standard-Linux-Bibliothek, die sich mit Zeit befasst
Python-Code zur Bestimmung der monatlichen Signale für Investitionen mit relativer Stärke
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Aus einem Buch, das die Denkweise des Programmierers interessanterweise gelernt hat (Python)
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Beachten Sie, dass ich den Algorithmus des maschinell lernenden Naive Bayes-Klassifikators verstehe. Und ich habe es in Python geschrieben.
So berechnen Sie die Volatilität einer Marke
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Holen Sie sich den Aufrufer einer Funktion in Python
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Ausgabe in Form eines Python-Arrays
Python Amateur versucht die Liste zusammenzufassen ②
Berücksichtigung der Stärken und Schwächen von Python
[Python] Wirf eine Nachricht an den Slack-Kanal
Zubu Amateur will Python starten