I am creating a Matplotlib figure to display in a HTML template in my Django application. I send this figure to the HTML by saving it under my static files, and then loading an img
tag with the saved .png
.
I do this in my views.py
after getting a reference to the figure.
# Get analysis visualization chart
figure = analyser.visualize_tweets(emotions)
# Save figure in static folder as png
figure.savefig('static/analysis_figures/figure.png')
# Inject html with figure path
response['analysis_figure_path'] = 'analysis_figures/figure.png'
return render(request, 'landing_page/index.html', response)
My HTML is something like this:
<img src={% static analysis_figure %} alt="">
However, this caused the RuntimeError: main thread is not in main loop
to happen when the function in my views.py
is called a second time (if it's called once everything works properly).
To prevent this error, I moved saving the Matplotlib figure to main()
as to run in the main thread and then call it in my original function. This fixed the error, but prevents my HTML from reloading so every time the user submits a query the new figure is displayed over the previous one without the previous one being removed.
Any ideas on any of the problems ?
I think this post explains what to do: How to clean images in Python / Django?
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
As explained here: https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
To prevent that the new figure is displayed over the previous one use:
plt.close() / figure.close()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With