웹 애플리케이션 서버(Flask)에 임베딩 #

웹 서버에서 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 명령줄 도구 를 사용하여 실행해야 합니다. 작업 디렉토리에 다음 스크립트가 포함되어 있다고 가정합니다.

유닉스 계열 시스템

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에서 생성한 갤러리