python matplotlib保存图片太慢如何解决
matplotlib可以说是python绘图中最最最经典的库,然而,当数据源较大时,其保存速度也会变得极慢,苦其久矣,其它绘图库,要么资料极少,要么不好用,那么,只能从其本身出发,想办法优化保存速度了。
在尝试了不限于jit、清除画布等等方法均失败后,终于探索出一种有效的办法!
保存时间从3.2s提升到了1.6s!!!
解决办法
- 找到你虚拟环境中 matplotlib 里pyplot.py的位置
例:我的是在 D:\CRR\venv\Lib\site-packages\matplotlib\pyplot.py
一般都是在你项目目录的 venv\Lib\site-packages\matplotlib\pyplot.py
- 打开此脚本,找到 savefig 里的 fig.canvas.draw_idle(),将其注释,我的是在978行,行号不一定相同
效果
这里是注释了的,保存速度为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,省的影响到后续其它的使用,毕竟是直接注释了源码
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
python dataframe向下向上填充,fillna和ffill的方法
今天小编就为大家分享一篇python dataframe向下向上填充,fillna和ffill的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-11-11详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf
这篇文章主要介绍了详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-10-10
最新评论