python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python matplotlib保存图片太慢

python matplotlib保存图片太慢如何解决

作者:一届纯良

这篇文章主要介绍了python matplotlib保存图片太慢问题的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

matplotlib可以说是python绘图中最最最经典的库,然而,当数据源较大时,其保存速度也会变得极慢,苦其久矣,其它绘图库,要么资料极少,要么不好用,那么,只能从其本身出发,想办法优化保存速度了。

在尝试了不限于jit、清除画布等等方法均失败后,终于探索出一种有效的办法!

保存时间从3.2s提升到了1.6s!!!

解决办法

例:我的是在 D:\CRR\venv\Lib\site-packages\matplotlib\pyplot.py

一般都是在你项目目录的 venv\Lib\site-packages\matplotlib\pyplot.py

效果

这里是注释了的,保存速度为1.6s

这里是没注释的,速度为3.2s

注意事项

如果你需要不断去plt.show(),不断刷新、渲染,不推荐此方法(我没这个需求,还没测试过此法是否试用这种情况)

如果你仅需保存图片到本地(哪怕需要背景透明(亲测)),直接使用此方法即可!!!

考虑到直接修改了库的源码,为避免其它场景下的冲突,建议在修改源码时,加个参数控制是否启用那行命令

分析过程

1.在pycharm里,使用这种方法分析运行情况

按照运行时间排序,发现在保存这一步花了3.6s的时间,就一行就这么慢!!!

plt.savefig(savepath, pad_inches=0.0, transparent=True)

2.双击点开后

发现在savefig后还有一步

fig.canvas.draw_idle() # need this if ‘transparent=True' to reset colors

注释里我大概理解是指:当设置背景透明且需要刷新颜色时需要这一步 又看了看这句话消耗的时间,占了保存时的一半!!!官方还贴心的备注了可以根据具体情况重写此方法

而我们仅需保存,并没有重新渲染的需求

3.而且官方的注释里说了,这里就是针对GUI时间循环时刷新小部件的,我单纯的后端保存,完全用不到才对,

4.尝试将其注释,看是否会影响到绘图结果

经测试,并无影响!!!包括尺寸、大小 完全一样!!!

其实还是推荐,重写一下savefig,加一个参数来判断是否关闭这个draw_idle,省的影响到后续其它的使用,毕竟是直接注释了源码

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文