ウェブアプリケーションサーバーへの埋め込み (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 にも追加したいと考えています。これらの取り組みに貢献することに興味があるなら、それは素晴らしいことです。

Sphinx-Gallery によって生成されたギャラリー