메모
전체 예제 코드를 다운로드 하려면 여기 를 클릭 하십시오.
웹 애플리케이션 서버(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에 추가하고 싶습니다. 이러한 노력에 기여하는 데 관심이 있다면 좋을 것입니다.