Incorporando em um servidor de aplicações web (Flask) #

Ao usar Matplotlib em um servidor web, é altamente recomendável não usar pyplot (pyplot mantém referências às figuras abertas para fazer o showtrabalho, mas isso causará vazamentos de memória, a menos que as figuras sejam fechadas corretamente).

Desde o Matplotlib 3.1, pode-se criar figuras diretamente usando o Figure construtor e salvá-las em buffers de memória. Em versões mais antigas, era necessário instanciar explicitamente uma tela Agg (consulte, por exemplo , a demo CanvasAgg ).

O exemplo a seguir usa Flask , mas outras estruturas funcionam de maneira semelhante:

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

Como o código acima é um aplicativo Flask, ele deve ser executado usando a ferramenta de linha de comando flask, assumindo que o diretório de trabalho contém este script:

Sistemas tipo Unix

FLASK_APP=web_application_server_sgskip flask run

janelas

set FLASK_APP=web_application_server_sgskip
flask run

Imagens clicáveis ​​para HTML #

Andrew Dalke, da Dalke Scientific , escreveu um bom artigo sobre como criar mapas de cliques html com PNGs agg do Matplotlib. Também gostaríamos de adicionar essa funcionalidade ao SVG. Se você estiver interessado em contribuir para esses esforços, seria ótimo.

Galeria gerada por Sphinx-Gallery