参考:
[生态综述,写的很不错]Python数据可视化2018:为什么这么多的库?
中文:https://python.freelycode.com/contribution/detail/1415
英文:https://www.anaconda.com/python-data-visualization-2018-why-so-many-libraries/
Python可视化库解析及安装
https://www.2cto.com/kf/201712/702233.html
10个超实用的python可视化库,总有一款适合你
中文:http://nooverfit.com/wp/10个超实用的python可视化库,总有一款适合你/
英文:https://mode.com/blog/python-data-visualization-libraries
[很多实用内容,比较好的专栏]用Python做科学计算
https://wizardforcel.gitbooks.io/hyry-studio-scipy/9.html
1 概述
先可以看一个牛X轰轰的公司kitware:https://www.kitware.com/
VTK, paraview, mayavi都是他家的产品。
另外看个生态图,各家软件的关系:
“SciVis”库组
左下角的那一堆软件都是。
“SciVis”是一个可分离的库组,主要用于物理位置数据的可视化(在图的左下方)。这些工具(VisPy,glummpy,GR,Mayavi,paraView,VTK以及yt)主要是基于1992年OpenGL图形标准而建立,以三维或四维(3D随时间变化)形式对物理进程进行图形密集型的可视化,用于常规或非常规的格网数据。这些库出现的时间早于HTML5对丰富的网络应用程序的支持,通常侧重于工程领域或科学背景下的高性能桌面GUI应用程序。
“InfoVis”库组
其它的库几乎都来自于“InfoVis”库组,主要侧重在任意空间信息的可视化,并非必需来自于三维物理世界。InfoVis库使用打印页面或计算机屏幕的两个维度解译抽象空间,通常使用轴和标签。InfoVis库可以被细分成许多的子库:
2选库方法
Viz 工具之间的区别
上述按照历史和技术分类的方法有助于解释我们如何获得Python viz包的当前数量,但是它也有助于解释为什么不同的包之间用户水平的差异如此巨大。具体来说,主要的差异存在于所支持的绘图类型、数据规模、用户界面,这些差异使得库的选择不仅仅是个人喜好或方便的问题,因此理解他们非常重要:
绘图类型
最基本的绘图类型在多个库之间共享,但是其它的绘图类型仅在某些库中可用。考虑到库的数量、绘图类型以及他们随时间的变化,精确的描绘出每一个库所支持的内容是十分困难的,但是如果你查看每一个库的范例,你通常可以清楚的看到其重点是什么。作为一个粗略的指南:
统计图(散点图、直线图、区域图、条形图、直方图):几乎所有的InfoVis库都覆盖了这些图,但这些图是Seaborn、bqplot、Altair、广告牌咯他、plot9的主要关注点。
图像,规则格网,矩形网格:Boken,Datashader,HoloViews,Matplotlib,Plotly以及大多数的SciVis库都能够很好的支持。
不规则的二维网格(三角形网格):由SciVis库和Matplotlib,Bokeh,data hader,HoloViews支持。
地理数据:Matplotlib(附带Cartopy),GeoViews,ipyleaflet,plot
网络/图形:NetworkX,,Plotly, Bokeh, HoloViews, Datashader
3D(网格,散点等):SciVis库完全支持,并在Plotly,Matplotlib,HoloViews和ipyvolume中提供一些支持。
数据大小
每个库的架构和底层技术决定了其所支持的数据规模大小,从而决定了该库是否适合于大型图像、电影、多维数组、长时间序列、网格或其他大型数据集:
SciVIs:使用汇编的数据库和本地GUI应用程序通常可以处理非常大的网格数据集,千兆字节或更大。
基于matplotlib:通常可以平稳的处理数十万个点,在某些特殊情况下甚至更多(例如,取决于后端)。
JSON:没有特殊处理,JSON基于文本的数据编码将基于JSON的规范限制在几千点到几十万点,这是由于所需的文件大小和文本处理。
JavaScript:ipywidgets,Bokeh和Plotly都使用JSON,但使用额外的二进制数据传输机制来增强它,以便它们可以处理数十万到数百万个数据点。
WebGL:使用HTML画布的JavaScript库为了获得良好的性能,最多只能提供几十万个点,但是WebGL(通过ipyvolume,Plotly和在某些情况下Bokeh)允许提供数百万个点。
服务器端渲染:Datashader或Vaex的外部外部InfoVis服务器端呈现通过将任意大的分布式或非核心数据集转换为固定大小的图像嵌入客户端浏览器,允许web浏览器中的数十亿、数万亿或更多数据点。
由于这些类型的库支持的数据大小范围很广(从而在某种程度上支持数据类型),需要处理大数据的用户需要在一开始就选择合适的库。
行业选择
在 Python 中,将数据可视化有多种选择,因此何时选用何种方案才变得极具挑战性。
如果你想做一些专业的统计图表,我推荐你使用Seaborn,Altair;
数学,科学,工程领域的学者就选择PyQtGraph,VisPy,Mayavi2;
网络研究和分析方面,NetworkX,python-igraph会是一个不错的选择。
地理投影就选geoplotlib,folium;
评估数据缺失就选missingno;有了HoloViews再也不用为高维图形犯愁;如果你不喜欢花俏的修饰,那就选择Leather。
如果你是一名新手但有MATLAB基础,matplotlib会很好上手;有R基础的就选ggplot;如果你是新手或懒癌晚期者,Plotly将会是一大福音,它提供了大量图表集可供你选择与使用。
3工具介绍
TVTK-三维可视化数据
https://wizardforcel.gitbooks.io/hyry-studio-scipy/8.html
内核是c++,封装成python接口
VTK (http://www.vtk.org/) 是一套三维的数据可视化工具,它由C++编写,包涵了近千个类帮助我们处理和显示数据。它在Python下有标准的绑定,不过其API和C++相同,不能体现出Python作为动态语言的优势。因此enthought.com开发了一套TVTK库对标准的VTK库进行包装,提供了Python风格的API、支持Trait属性和numpy的多维数组。
Mayavi-更方便的可视化
Mayavi2,基于VTK,完全用Python编写
虽然VTK 3D可视化软件包功能强大,Python的TVTK包装方便简洁,但是要用这些工具快速编写实用的三维可视化程序仍然需要花费不少的精力。因此基于VTK开发了许多可视化软件,例如:ParaView、 VTKDesigner2、Mayavi2等等。
Mayavi2完全用Python编写,因此它不但是一个方便实用的可视化软件,而且可以方便地用Python编写扩展,嵌入到用户编写的Python程序中,或者直接使用其面向脚本的API:mlab快速绘制三维图。
Mayavi vs Vispy
Mayavi基于VTK,这是一个使用传统OpenGL的古老的大型库 (固定功能管道)。 Mayavi本身大多是用C ++编写的难以吸引贡献者。首席开发商盖尔表示 它快死了。 Mayavi2完全用Python编写。生机继续。
Vispy使用现代opengl并在Python中一直实现。它仅依赖于几个后端之一来提供渲染窗口。这使Vispy更强大(我们可以使用更高级的 着色器)并且灵活。 Mayavi和VTK已经存在了很长一段时间但是,Vispy需要一些时间来匹配功能。
Vispy dev here. Mayavi/VTK are mature, very powerful and feature-complete. Vispy is not even close to offer the same amount of functionality. But eventually, we hope it will.
The low-level OpenGL interfaces in Vispy are now relatively solid, and are the foundations of higher-level, more abstract graphical interfaces we are currently developing (similar to VTK and Mayavi). Our goal is to let scientists easily create fast interactive visualizations in 2D and 3D without any knowledge of OpenGL.
Here is a very early example of these higher-level interfaces: http://vispy.org/examples/basics/scene/surface_plot.html We also have started to work on an OpenGL backend for matplotlib.
Finally, a few remarks:
* Vispy focuses on performance and big datasets (with tens of millions of points or more) with minimal memory footprint (using NumPy)
* Vispy is pure Python and depends just on NumPy, basically. VTK is a heavy C++ library, sometimes complicated to install.
4产品应用
4.1VeloView
http://www.pclcn.org/study/shownews.php?lang=cn&id=307
VeloView是Kitware与Velodyne联合推出的开源点云可视化软件。github上有源码。
VeloView支持对Velodyne激光雷达设备HDL-32E 和HDL-64E实时获取与可视化分析,只是目前该软件依赖的第三方库比较多,Python、Qt、Boost、VTK、PythonQt、ParaView、pcap,