ノート
完全なサンプルコードをダウンロードするには、ここをクリックしてください
ウェブアプリケーションサーバーへの埋め込み (Flask) #
Web サーバーで Matplotlib を使用する場合、pyplot を使用しないことを強くお勧めします (pyplot は、開いている Figure への参照を保持して機能させますが、Figure
show
が適切に閉じられていない限り、メモリ リークが発生します)。
Matplotlib 3.1 以降、Figure
コンストラクターを使用して Figure を直接作成し、それらをメモリ内バッファーに保存できます。古いバージョンでは、Agg キャンバスを明示的にインスタンス化する必要がありました (たとえば、
CanvasAgg demoを参照してください)。
次の例では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 アプリケーションであるため、 フラスコ コマンドライン ツールを使用して実行する必要があります 。作業ディレクトリに次のスクリプトが含まれていると仮定します。
Unix ライクなシステム
FLASK_APP=web_application_server_sgskip flask run
ウィンドウズ
set FLASK_APP=web_application_server_sgskip
flask run
HTML のクリッカブル画像#
Dalke Scientificの Andrew Dalke は、Matplotlib agg PNG を使用して html クリック マップを作成する方法について 、すばらしい記事を書いています。この機能を SVG にも追加したいと考えています。これらの取り組みに貢献することに興味があるなら、それは素晴らしいことです。