注意
前往結尾以下載完整的範例程式碼。
嵌入到 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。如果您有興趣為這些工作做出貢獻,那就太好了。