Intégration dans un serveur d'application Web (Flask) #

Lors de l'utilisation de Matplotlib dans un serveur Web, il est fortement recommandé de ne pas utiliser pyplot (pyplot conserve les références aux figures ouvertes pour showfonctionner, mais cela entraînera des fuites de mémoire à moins que les figures ne soient correctement fermées).

Depuis Matplotlib 3.1, on peut directement créer des figures à l'aide du Figure constructeur et les enregistrer dans des tampons en mémoire. Dans les anciennes versions, il était nécessaire d'instancier explicitement un canevas Agg (voir par exemple la démo CanvasAgg ).

L'exemple suivant utilise Flask , mais d'autres frameworks fonctionnent de la même manière :

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

Étant donné que le code ci-dessus est une application Flask, il doit être exécuté à l'aide de l' outil de ligne de commande flask En supposant que le répertoire de travail contient ce script :

Systèmes de type Unix

FLASK_APP=web_application_server_sgskip flask run

les fenêtres

set FLASK_APP=web_application_server_sgskip
flask run

Images cliquables pour HTML #

Andrew Dalke de Dalke Scientific a écrit un bel article sur la façon de créer des cartes de clics html avec Matplotlib agg PNG. Nous aimerions également ajouter cette fonctionnalité à SVG. Si vous êtes intéressé à contribuer à ces efforts, ce serait formidable.

Galerie générée par Sphinx-Gallery