Hope is a Dream. Dream is a Hope. (旧)

非公開ふぃふぃ工房ブログは閉鎖しました。新ブログに移行します。

Flaskを使ってMatplotlibグラフを表示する

[Flask + Matplolib] Flaskを使ってMatplotlibグラフを表示する

Flask(python)側で計算させた結果を、Matplotlibを使ってグラフにし、それを上手いことHTMLで表示したいと思ってるので調査してみる。

先行事例

  1. ローカルに画像を保存する方法
  2. キャッシュに保存する方法
  3. Content-Type:image/pngで送る方法

なんとなくしらべると上記の流れがありそう。

調査

matplotlib を Flask から使う方法

引用

 

import matplotlib
matplotlib.use('Agg')
 
from matplotlib import pyplot
import numpy
 
from flask import Flask, send_file
from cStringIO import StringIO
 
app = Flask(__name__)
 
 
def plot(image):
    x = numpy.linspace(0, 10)
    y = numpy.sin(x)
    pyplot.plot(x, y)
    pyplot.savefig(image, format='png')
 
 
@app.route('/image.png')
def image_png():
    image = StringIO()
    plot(image)
    image.seek(0)
    return send_file(image,
                     attachment_filename="image.png",
                     as_attachment=True)
 
 
@app.route('/')
def index():
    return '<img src="image.png">'
 
 
app.run(debug=True)

HTMLでは、ファイル(image.png)を直接リクエスト?アクセスしている。

そうすることで、Flaskにてファイル生成の処理が実行され、

最終的にsend_file()で画像ファイルが返される仕組み。

しかし、これだと、HTMLロード時にしか画像が更新されないので注意。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)