2017-01-04 21 views
5

Bir flask uygulamasında kullanıcı girdisine dayalı dinamik grafikler oluşturmak istiyorum. Ancak aşağıdaki hatayı alıyorum: dize argümanı beklendiği, var 'byte'Flask'ta görüntülemek için dinamik grafikler nasıl oluşturulur?

Ben io.BytesIO() kullanırsanız, bu hatayı almıyorum ama test.html

üzerinde arsa almıyorum örnekÇalışma
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

her zaman soruda tam hata mesajını göster (Traceback) Diğer yararlı bilgiler vardır. – furas

cevap

6

Kullanım BytesIO ve üstü 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

Teşekkür ederiz! Beklendiği gibi çalıştı. – RRC

İlgili konular