Search on blog:

Flask: How to use BytesIO in Flask to display matplotlib image without saving in file.

Przykład pokazuje jak - użyć BytesIO do stworzenie w pamięci obiekt pseudo-pliku - zapisać w tym obiekcie obrazu z matplotlib w formacie png - pobrać dane z tego obiektu - zamienić te dane na text zakodowany base64 - stworzyć w HTML tag obrazka z osadzonym obrazkiem w base64

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.run(debug=True)

Można także zapisać obrazek matplotlib jako jpg i wtedy będzie potrzebny jpeg w src="data:image/jpeg;base64,{}".

W podobny sposób można w HTML osadzać inne pliki.

Zasada działania FuncAnimation w matplotlib

FuncAnimation przyjmuje jako parametr funkcję np. update_data(liczba) i wykonuje następujące rzeczy:

  1. FuncAnimation wywołuje funkcje init()
  2. numer = 0
  3. FuncAnimation wywołuje funkcje update_data(numer)
  4. update_data() modyfikuje dane na wykresie
  5. ??? FuncAnimation czysci wykres (gdy blit=True) ???
  6. ??? FuncAnimation rysuje nowy wykres (gdy blit=True) ???
  7. FuncAnimation robi przerwę
  8. numer = numer + 1
  9. jeśli numer < max_numer …

« Page: 1 / 1 »