Hinweis
Gehen Sie zum Ende, um den vollständigen Beispielcode herunterzuladen.
Einbettung in einem Webanwendungsserver (Flask)#
Bei der Verwendung von Matplotlib auf einem Webserver wird dringend davon abgeraten, pyplot zu verwenden (pyplot hält Referenzen auf die geöffneten Abbildungen, um show zu ermöglichen, was jedoch zu Speicherlecks führt, es sei denn, die Abbildungen werden ordnungsgemäß geschlossen).
Seit Matplotlib 3.1 kann man direkt Abbildungen mit dem Figure-Konstruktor erstellen und in In-Memory-Puffern speichern. In älteren Versionen war es notwendig, explizit eine Agg-Leinwand zu instanziieren (siehe z. B. 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-Kommandozeilenwerkzeug ausgeführt werden. Vorausgesetzt, 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
Klickbare Bilder für HTML#
Andrew Dalke von Dalke Scientific hat einen schönen Artikel darüber geschrieben, wie man mit Matplotlib Agg PNGs interaktive HTML-Klick-Maps erstellt. Wir möchten diese Funktionalität auch für SVG hinzufügen. Wenn Sie an einem Beitrag zu diesen Bemühungen interessiert sind, wäre das großartig.