Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行时错误:主线程不在使用带有Django的Matplotlib的主循环中_Python_Django_Matplotlib_Django Templates_Html Injections - Fatal编程技术网

Python 运行时错误:主线程不在使用带有Django的Matplotlib的主循环中

Python 运行时错误:主线程不在使用带有Django的Matplotlib的主循环中,python,django,matplotlib,django-templates,html-injections,Python,Django,Matplotlib,Django Templates,Html Injections,我正在创建Matplotlib图形,以在Django应用程序的HTML模板中显示。我通过将此图保存在静态文件下,然后加载带有保存的.png的img标记,将其发送到HTML。 在获得对该图的引用后,我在my views.py中执行此操作 # Get analysis visualization chart figure = analyser.visualize_tweets(emotions) # Save figure in static fol

我正在创建Matplotlib图形,以在Django应用程序的HTML模板中显示。我通过将此图保存在静态文件下,然后加载带有保存的.png的img标记,将其发送到HTML。 在获得对该图的引用后,我在my views.py中执行此操作

        # 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)
我的HTML是这样的:

<img src={% static analysis_figure %} alt="">
但是,这导致了运行时错误:当my views.py中的函数在一切正常工作后再次调用时,主线程不在主循环中。 为了防止此错误,我将Matplotlib图形保存到main as以在主线程中运行,然后在原始函数中调用它。这修复了错误,但防止重新加载我的HTML,因此每次用户提交查询时,新图形都会显示在前一个图形上,而不会删除前一个图形。
对这些问题有什么想法吗?

我想这篇文章解释了该怎么做:

如下文所述:

要防止新图形显示在前一个图形上,请使用:
plt.close/figure.close

你好,谢谢你的回答。你可以对你的代码添加一些注释吗?是的,我正在使用Matplotlib包,它在运行时生成一个图形,我将Matplotlib图像对象更改为普通PNG图像,然后插入我的django web应用程序。在这里,每次图形图像都会随着我的网站频繁变化,所以我将其转换为二进制图像对象,并在运行时本地存储为图像!然后我从URI获取位置地址。这些都是我做的,因为图形结果正在改变,我们必须更新,这就是为什么!!谢谢,这是有道理的,我只是问,因为我正在复习你的答案,我认为一个解释可能是有用的。顺便说一句,我没有否决你的答案。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt


plt.bar(x, y, tick_label = tick_label, 
width = 0.8, color = ['red','yellow', 'green']) 
    

plt.xlabel('x - axis') 

plt.ylabel('y - axis') 

plt.title('My bar chart!') 

plt.style.use('fivethirtyeight')
    
fig=plt.gcf()
plt.close()

`enter code here`# convert graph
buf=io.BytesIO()
fig.savefig(buf,format='png')        
buf.seek(0)
string =base64.b64encode(buf.read())

uri=urllib.parse.quote(string)

context={'imgdata':uri}