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.
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 ")
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?
Finden Sie heraus, wer jedes der Elemente im ersten Arbeitsskript ist (lassen Sie den numpy-Teil weg).
matplotlib
pyplot
--Module in der matplotlib
Bibliothek
--Importieren und verwenden Sie mit import matplotlib.pyplot
usw.plt
--Alias von matplotlib.pyplot
(daher Typ ist Modul)fig
matplotlib.figure.Figure
fig = pyplot.figure ()
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.
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.
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.
pyplot
Modul selbst verhält sich wie eine Klasse oder ihre InstanzRecommended Posts