Incorporamento in un server di applicazioni Web (Flask) #

Quando si utilizza Matplotlib in un server Web, si consiglia vivamente di non utilizzare pyplot (pyplot mantiene i riferimenti alle figure aperte per showfunzionare, ma ciò causerà perdite di memoria a meno che le figure non siano chiuse correttamente).

A partire da Matplotlib 3.1, è possibile creare direttamente figure utilizzando il Figure costruttore e salvarle in buffer in memoria. Nelle versioni precedenti, era necessario istanziare esplicitamente un canvas Agg (vedi ad esempio CanvasAgg demo ).

L'esempio seguente utilizza Flask , ma altri framework funzionano in modo simile:

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}'/>"

Poiché il codice precedente è un'applicazione Flask, dovrebbe essere eseguito utilizzando lo strumento da riga di comando flask Supponendo che la directory di lavoro contenga questo script:

Sistemi simili a Unix

FLASK_APP=web_application_server_sgskip flask run

finestre

set FLASK_APP=web_application_server_sgskip
flask run

Immagini cliccabili per HTML #

Andrew Dalke di Dalke Scientific ha scritto un bell'articolo su come creare mappe di clic html con Matplotlib agg PNGs. Vorremmo anche aggiungere questa funzionalità a SVG. Se sei interessato a contribuire a questi sforzi, sarebbe fantastico.

Galleria generata da Sphinx-Gallery