2017-01-04 21 views
5

フラスコアプリのユーザー入力に基づいて動的なプロットを作成したいと考えています。しかし、私は次のようなエラーになっています: 文字列引数予想を、得た「バイト」Flaskに表示する動的プロットを作成するには?

私はio.BytesIO()を使用している場合は、私はこのエラーを取得していないのですが、私はtest.htmlという

にプロットを得ていないのです例作業
from flask import Flask 
from flask import render_template 
import matplotlib.pyplot as plt 
import io 
import base64 

app = Flask(__name__) 

@app.route('/plot') 
def build_plot(): 
    img = io.StringIO() 
    y = [1,2,3,4,5] 
    x = [0,2,1,3,4] 
    plt.plot(x,y) 
    plt.savefig(img, format='png') 
    img.seek(0) 

    plot_url = base64.b64encode(img.getvalue()) 
    return render_template('test.html', plot_url=plot_url) 

if __name__ == '__main__': 
    app.debug = True 
    app.run() 

Test.htmlという

<!DOCTYPE html> 
<html> 
<title> Plot</title> 
<body> 
<img src="data:image/png;base64, {{ plot_url }}"> 
</body> 
</html> 
+0

常に問題の完全なエラーメッセージ(トレースバック)その他の有用な情報があります。 – furas

答えて

6

使用BytesIO以降decode()

from flask import Flask 
#from flask import render_template 
import matplotlib.pyplot as plt 
import io 
import base64 

app = Flask(__name__) 

@app.route('/plot') 
def build_plot(): 

    img = io.BytesIO() 

    y = [1,2,3,4,5] 
    x = [0,2,1,3,4] 
    plt.plot(x,y) 
    plt.savefig(img, format='png') 
    img.seek(0) 

    plot_url = base64.b64encode(img.getvalue()).decode() 

    return '<img src="data:image/png;base64,{}">'.format(plot_url) 

if __name__ == '__main__': 
    app.debug = True 
    app.run() 
+0

ありがとうございました!期待どおりに働いた。 – RRC

関連する問題