Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Flask에서 Matplotlib 그래프를 표시하는 방법

데이터 분석 결과를 웹에서 바로 확인하고 싶다면, 가벼운 파이썬 웹 프레임워크인 Flask와 시각화 라이브러리인 Matplotlib을 함께 사용하면 됩니다. Flask 라우트에서 그래프를 PNG 이미지로 변환해 응답으로 반환하면, 별도의 파일 저장 없이 브라우저에서 바로 그래프를 확인할 수 있습니다.

구현 절차

  • 간단한 Flask 애플리케이션을 작성합니다.
  • 터미널에서 애플리케이션 파일이 있는 디렉터리로 이동한 뒤, 아래 명령으로 실행할 앱을 지정합니다.
    $ export FLASK_APP=file.py
    (Windows 환경에서는 set FLASK_APP=file.py를 사용합니다.)
  • $ flask run 명령으로 개발 서버를 실행합니다.
  • 브라우저에서 https://127.0.0.1:5000/print-plot/ 주소로 접속합니다.
  • numpy의 random 모듈을 이용해 x축과 y축에 사용할 무작위 데이터 포인트를 생성합니다.
  • 생성된 축(axis) 위에 x, y 데이터를 플롯합니다.
  • 완성된 그림(figure)을 PNG 형식으로 저장합니다.
  • BytesIO 버퍼 객체의 전체 내용을 읽어 이미지 응답으로 반환합니다.

예제 코드

import io
import numpy as np
import matplotlib.pyplot as plt
from flask import Flask, Response
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

app = Flask(__name__)

@app.route('/print-plot')
def plot_png():
    fig = Figure()
    axis = fig.add_subplot(1, 1, 1)
    xs = np.random.rand(100)
    ys = np.random.rand(100)
    axis.plot(xs, ys)
    output = io.BytesIO()
    FigureCanvas(fig).print_png(output)
    return Response(output.getvalue(), mimetype='image/png')

코드 설명

  • Figure(): 백엔드에 종속되지 않는 빈 그림 객체를 생성합니다.
  • add_subplot(1, 1, 1): 그림 안에 하나의 축을 추가합니다.
  • np.random.rand(100): 0과 1 사이의 난수 100개씩을 x, y 값으로 생성합니다.
  • io.BytesIO(): 메모리상의 바이너리 버퍼를 만들어 PNG 이미지를 임시 저장합니다.
  • FigureCanvas(fig).print_png(output): 그림을 PNG 형식으로 버퍼에 기록합니다.
  • Response(..., mimetype='image/png'): 버퍼의 내용을 PNG 이미지로 브라우저에 반환합니다.

실행 결과

서버를 실행한 뒤 브라우저에서 /print-plot 경로에 접속하면, 매 요청마다 새로 생성된 난수 산점 그래프가 PNG 이미지로 화면에 표시됩니다.

Flask에서 Matplotlib 그래프를 표시하는 방법