Matplotlib图像加速

matplotlib

开头先记录一点重要的东西:

在python 3.5 下Anaconda安装OpenCV直接使用命令:

conda install -c menpo opencv3

在python 3.5 下Anaconda安装Mayavi直接使用命令:

conda install -c menpo mayavi=4.5.0

这两个命令都是本人实测可以的,所以在这里记录一下以防忘记,当然不是使用Anaconda可以直接忽略。

回归正题,在使用Matplotlib画图的时候,一般绘制简单的图像都没有什么问题,但是当图像中的线条特别多的时候,就会发现即便是Matplotlib能够顺利的将图像绘制出来,图像的平移和缩放会变得非常的卡顿,现在以下面的绘制代码为例:

可以直接绘制得到下图:

Matplotlib图像加速

Matplotlib图像加速

这个图像如果使用平移和缩放工具的话,显示会非常的卡,因此需要对Matplotlib的图像进行加速。matplotlib.collections是一个专门为大量图形绘制而进行加速的一个类:

matplotlib.collections

Classes for the efficient drawing of large collections of objects that share most properties, e.g., a large number of line segments or polygons.

The classes are not meant to be as flexible as their single element counterparts (e.g., you may not be able to select all line styles) but they are meant to be fast for common use cases (e.g., a large set of solid line segemnts)

因此在绘制的时候先将所有的直线全部归类,然后使用add_collection()方法一次性将所有的直线集合全部绘制上去,可以迅速的提高Matplotlib的图像刷新效率,试验的代码如下:

使用上面代码绘制出来的图像在平移缩放的时候,跟随效果非常好。由于单张图片的图像信息较多,就不提供GIF图像了。同时在针对三维图像时mplot3D也提供了相应的collections,最常用的比如Line3DCollection和Patch3DCollection这两个方法。

3条评论

  1. GYM   •  

    你好,关于文章中提到的Collection,官网上也只给了2维collection的算例,想用下Line3DCollection但网上没有找到相关的介绍,能否提供相关网站或者资料或者相关小栗子?十分感谢。

    • 伊犁的秋天   •     Author

      这个是mplot3d提供的,在mplot3d的document里面有函数的介绍,具体地址在:http://matplotlib.org/mpl_toolkits/mplot3d/api.html,直接查找class mpl_toolkits.mplot3d.art3d.Line3DCollection(segments, *args, **kwargs)就可以找到说明了,使用方式和LineCollection()差不多。

      • GYM   •  

        好的~谢谢~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Are you human? Click the Apple...