2017-01-04 4 views
5

Ich möchte dynamische Diagramme basierend auf Benutzereingaben in einer Kolben-App erstellen. Allerdings bin ich folgende Fehlermeldung erhalten: String-Argument erwartet, bekam ‚Bytes‘Wie erstelle ich dynamische Diagramme, die auf Flask angezeigt werden?

Wenn ich io.BytesIO(), ich diesen Fehler nicht immer, aber ich bin nicht die Handlung immer auf 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

immer in Frage zeigen volle Fehlermeldung (Traceback) Es gibt andere nützliche Informationen. – furas

Antwort

6

Verwenden BytesIO und später decode()

Arbeitsbeispiel

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

Danke! Hat wie erwartet funktioniert. – RRC

Verwandte Themen