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 showArbeit 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.

Galerie generiert von Sphinx-Gallery