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行,行号不一定相同
    python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第1张图片

效果

这里是注释了的,保存速度为1.6s
python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第2张图片

这里是没注释的,速度为3.2s
python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第3张图片

注意事项

如果你需要不断去plt.show(),不断刷新、渲染,不推荐此方法(我没这个需求,还没测试过此法是否试用这种情况)
如果你仅需保存图片到本地(哪怕需要背景透明(亲测)),直接使用此方法即可!!!
考虑到直接修改了库的源码,为避免其它场景下的冲突,建议在修改源码时,加个参数控制是否启用那行命令

分析过程

  1. 在pycharm里,使用这种方法分析运行情况
    python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第4张图片
    按照运行时间排序,发现在保存这一步花了3.6s的时间,就一行就这么慢!!!

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

    python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第5张图片

  2. 双击点开后
    python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第6张图片

    发现在savefig后还有一步

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

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

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

  3. 而且官方的注释里说了,这里就是针对GUI时间循环时刷新小部件的,我单纯的后端保存,完全用不到才对,python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第7张图片

  4. 尝试将其注释,看是否会影响到绘图结果
    经测试,并无影响!!!包括尺寸、大小 完全一样!!!
    python matplotlib保存图片太慢?全网最新解决办法,速度快了一半_第8张图片

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

你可能感兴趣的:(Debug生涯,python,matplotlib,开发语言)