Noter
Cliquez ici pour télécharger l'exemple de code complet
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
show
fonctionner, 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.