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 showfuncione, 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.

Galería generada por Sphinx-Gallery