我用Pygame做了一个模拟,我想保存一个png文件,里面有一个用Matplotlib做的图,以便在模拟过程中用Pygame显示。这个程序很长,有多个循环。主要线路是:
fig = plt.figure()
...
if not filePath is None:
plt.savefig(fname=filePath, bbox_inches='tight', format="png")
plt.close()
return fig
这仅在整个程序完成时保存/创建文件。
我试着调用一个函数,它在一个线程中生成绘图,然后等待它完成以结束线程。我试过matplotlib.use('Agg')
和plt.pause(0.1)
。在程序执行期间,这些都不能帮助保存文件。
1条答案
按热度按时间k2fxgqgv1#
实现此目的的一种方法是将绘图保存在单独的线程中,正如您所尝试的那样。但是,您可能需要确保matplotlib后端设置正确,以便以非阻塞方式保存图。以下是一些建议:
1.将后端设置为非GUI后端:matplotlib的默认后端设计为在窗口中显示绘图,这可能会阻止主线程的执行。您可以通过在脚本顶部添加以下代码行将后端设置为非GUI后端,例如'Agg':
这将允许您保存绘图而不会阻塞主线程。
1.使用
plt.show(block=False)
方法:默认情况下,plt.show()
方法会阻止主线程的执行,直到绘图结束。但是,您可以使用block=False
参数使其不阻塞。可以按如下方式修改代码:这将允许您保存绘图而不会阻塞主线程。然后可以使用
pygame.image.load()
加载保存的图像并在模拟中显示它。1.使用
multiprocessing
模块:如果上述方法不起作用,您可以尝试使用multiprocessing
模块在单独的进程中运行绘图保存代码。下面是一个例子:这将允许您将绘图保存在单独的进程中,而不会阻塞主线程。然后可以使用
pygame.image.load()
加载保存的图像并在模拟中显示它。我希望这有帮助!