Nota
Haga clic aquí para descargar el código de ejemplo completo
Incrustación en un servidor de aplicaciones web (Flask) #
Cuando se usa Matplotlib en un servidor web, se recomienda encarecidamente no usar pyplot (pyplot mantiene referencias a las figuras abiertas para que
show
funcione, pero esto provocará pérdidas de memoria a menos que las figuras se cierren correctamente).
Desde Matplotlib 3.1, uno puede crear figuras directamente usando el Figure
constructor y guardarlas en búferes en memoria. En versiones anteriores, era necesario instanciar explícitamente un lienzo de Agg (ver, por ejemplo
, la demostración de CanvasAgg ).
El siguiente ejemplo usa Flask , pero otros marcos funcionan de manera similar:
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}'/>"
Dado que el código anterior es una aplicación de Flask, debe ejecutarse con la herramienta de línea de comandos de Flask. Suponiendo que el directorio de trabajo contiene este script:
Sistemas tipo Unix
FLASK_APP=web_application_server_sgskip flask run
ventanas
set FLASK_APP=web_application_server_sgskip
flask run
Imágenes en las que se puede hacer clic para HTML #
Andrew Dalke de Dalke Scientific ha escrito un buen artículo sobre cómo hacer mapas de clics html con Matplotlib agg PNG. También nos gustaría agregar esta funcionalidad a SVG. Si está interesado en contribuir a estos esfuerzos, sería genial.