ภาพรวม
สาธิตวิธีสร้างเว็บแอป Flask ที่แสดงกราฟ Matplotlib เป็นภาพ PNG ผ่าน Route
ขั้นตอน
- สร้าง Flask App
- กำหนด Route
/print-plot - ในฟังก์ชัน View:
- สร้าง
FigureและAxis - สร้างข้อมูลสุ่ม
xs,ys - พลอตด้วย
axis.plot(xs, ys) - เขียน Figure ลง
BytesIObuffer - คืนค่า
Responseพร้อม mimetypeimage/png
- สร้าง
- รันเซิร์ฟเวอร์:
export FLASK_APP=file.py && flask run - เปิดเบราว์เซอร์:
https://127.0.0.1:5000/print-plot/
ตัวอย่างโค้ด
import io
from flask import Response, Flask
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np
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')
if __name__ == '__main__':
app.run()
หมายเหตุ
- ใช้ Backend
Agg(Non-interactive) เหมาะสำหรับ Server BytesIOใช้เก็บภาพในหน่วยความจำ ไม่ต้องเขียนไฟล์