嵌入到 Web 应用程序服务器中 (Flask)#

在 Web 服务器中使用 Matplotlib 时,强烈建议不要使用 pyplot (pyplot 会保留对已打开图形的引用,以使 show 函数工作,但这会导致内存泄漏,除非正确关闭图形)。

从 Matplotlib 3.1 开始,可以直接使用 Figure 构造函数创建图形,并将其保存到内存缓冲区中。在旧版本中,需要显式实例化一个 Agg 画布(例如参见CanvasAgg 演示)。

以下示例使用 Flask,但其他框架的工作方式类似

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

由于上述代码是一个 Flask 应用程序,应使用 flask 命令行工具运行。假设工作目录包含此脚本

类 Unix 系统

FLASK_APP=web_application_server_sgskip flask run

Windows

set FLASK_APP=web_application_server_sgskip
flask run

用于 HTML 的可点击图像#

Dalke Scientific 公司的 Andrew Dalke 写了一篇关于如何使用 Matplotlib agg PNGs 制作 HTML 点击图的精彩文章。我们还希望将此功能添加到 SVG 中。如果您有兴趣为这些工作做出贡献,那将非常棒。

由 Sphinx-Gallery 生成的画廊