Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Einbettung in einen Webanwendungsserver (Flask) #
Bei der Verwendung von Matplotlib auf einem Webserver wird dringend empfohlen, pyplot nicht zu verwenden (pyplot behält Verweise auf die geöffneten Abbildungen bei, um die
show
Arbeit zu erleichtern, aber dies führt zu Speicherlecks, wenn die Abbildungen nicht ordnungsgemäß geschlossen sind).
Seit Matplotlib 3.1 kann man mit dem Konstruktor direkt Figuren erstellen Figure
und in In-Memory-Puffer speichern. In älteren Versionen war es notwendig, explizit einen Agg-Canvas zu instanziieren (siehe zB
CanvasAgg-Demo ).
Das folgende Beispiel verwendet Flask , aber andere Frameworks funktionieren ähnlich:
import base64
from io import BytesIO
from flask import Flask
from matplotlib.figure import Figure
app = Flask(__name__)
@app.route("/")
def hello():
# Generate the figure **without using pyplot**.
fig = Figure()
ax = fig.subplots()
ax.plot([1, 2])
# Save it to a temporary buffer.
buf = BytesIO()
fig.savefig(buf, format="png")
# Embed the result in the html output.
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return f"<img src='data:image/png;base64,{data}'/>"
Da der obige Code eine Flask-Anwendung ist, sollte er mit dem Flask -Befehlszeilentool ausgeführt werden. Angenommen, das Arbeitsverzeichnis enthält dieses Skript:
Unix-ähnliche Systeme
FLASK_APP=web_application_server_sgskip flask run
Windows
set FLASK_APP=web_application_server_sgskip
flask run
Anklickbare Bilder für HTML #
Andrew Dalke von Dalke Scientific hat einen netten Artikel darüber geschrieben, wie man HTML-Klickkarten mit Matplotlib agg PNGs erstellt. Wir möchten diese Funktionalität auch zu SVG hinzufügen. Wenn Sie daran interessiert sind, zu diesen Bemühungen beizutragen, wäre das großartig.