嵌入到 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 PNG 製作 html 點擊地圖。我們也希望將此功能新增至 SVG。如果您有興趣為這些工作做出貢獻,那就太好了。

Sphinx-Gallery 產生的圖庫