python可视化库对比_收藏|Python可视化库你知道多少?一文带你深入探讨

数据可视化的应用十分广泛,几乎可以应用于自然科学、工程技术、金融、通信和商业等各种领域。下面我们基于Python,详细的介绍一下适用于各个领域的几个实用的可视化库,快速带你入门!!

接下来,先用一张总体图概述可视化库之间的关系,随后会根据各种可视化库的支持图形类型,支持数据规模等维度对可视化库具体分析,并展开一一道来,让无论初学者还是架构师都能了解可视化库的各种前世今生的关系,利于掌握和架构自己程序。

一、python可视化库大阅兵

在图中,您可以看到几个主要的库组,每个库都有不同的起源,历史和焦点。一个明显可分离的组是用于可视化物理数据的“ SciVis ”库(在图的左下方)。这些工具(VisPy,glumpy,GR,Mayavi,ParaView,VTK和yt)主要基于1992年OpenGL图形标准,提供三维或四维物理过程的图形可视化(3D随时间变化),用于常规或不规则网格化数据。这些库早于HTML5对Web应用程序的支持,通常侧重于工程或科学环境中的高性能桌面GUI应用程序。

其他几乎所有的库都属于“ InfoVis ”,专注于任意空间中信息的可视化,而不一定是三维物理世界。InfoVis库使用打印页面或计算机屏幕的两个维度来使抽象空间可解释,通常使用轴和标签。InfoVis库可以进一步细分为多个子组:

1.1 Matplotlib

2003年发布的最古老,最受欢迎的InfoVis库之一,具有广泛的2D绘图类型和输出格式。Matplotlib还早于HTML5对丰富的Web应用程序的支持,而是使用桌面GUI工具包(如Qt和GTK)将重点放在静态图像上以及交互式图形上。Matplotlib包含一些3D支持,但比SciVis库提供的限制更多。

多年来,Matplotlib的2D绘图功能构建了各种工具,可以将其用作特定类型数据的渲染引擎,也可以用于特定领域(pandas,NetworkX,Cartopy,yt等),或提供更高级别的API可以简化绘图创建(ggplot,plotnine,HoloViews,GeoViews),或者使用其他类型的绘图(seaborn等)扩展它。

1.2 Java

一旦HTML5在浏览器中实现了丰富的交互性,许多库就开始为网页和Jupyter笔记本提供交互式2D图,使用自定义JS(Bokeh,Toyplot)或主要包装现有的JS库,如D3(Plotly,bqplot)。包装现有的JS可以轻松添加为JS应用创建的图库(就像Plotly一样),而使用自定义JS可以定义更低级的JS基元,这些基元可以在Python中组合成全新的绘图类型(对于Bokeh)。

1.3 JSON

由于像D3这样的Java库已经成熟,它们的功能已经在声明性JSON规范(Vega,Vega-Lite)中捕获,因此可以轻松地从任何语言生成Java,现在包括Python(通过Altair和以前通过vincent)。将完整的绘图规范作为可移植JSON提供,允许集成到多种类型的工具中。

1.4 WebGL

就像HTML5用于2D Java绘图一样,WebGL标准在浏览器和Jupyter中实现了3D交互性,从而导致基于three.js(pythreejs,ipyvolume),vtk.js(itk-jupyter-widgets)构建的3D浏览器内绘图或者regl(Plotly)。这些基于Web的新3D方法都没有接近桌面SciVis 3D库的广度和深度,但它们确实允许与Jupyter笔记本完全集成,并通过Web轻松共享和远程使用。因此,即使WebGL工具与SciVis工具有一些共同的应用程序,它们也可能与其他InfoVis工具更紧密地联系在一起。

二、可视化工具之间的区别

按历史和技术进行的上述细分有助于解释我们如何获得当前丰富的Python viz包,但它也有助于解释为什么各种包之间的用户级功能存在如此重大差异。具体而言,支持的绘图类型,数据大小,用户界面和API类型之间存在重大差异,这使得库的选择不仅仅是个人偏好或方便性,因此了解它们非常重要。

三、绘图类型

最基本的绘图类型在多个库之间共享,但其他库仅在某些库中可用。考虑到库的数量,绘图类型及其随时间的变化,很难精确地描述每个库中支持的内容,但是如果查看每个库的示例库,通常很清楚重点是什么。

3.1 统计图(散点图,线条,面积,条形图,直方图):

几乎所有InfoVis库都很好地支持,特别是 Seaborn,bqplot,Altair,ggplot2,plotnine的主要功能支持。

3.2 图像,常规网格,矩形网格:

得到Bokeh,Datashader,HoloViews,Matplotlib,Plotly以及大多数SciVis库的支持。

3.3 不规则的二维网格(三角网格)

SciVis库以及Matplotlib,Bokeh,Datashader,HoloViews的良好支持。

3.4 地理数据

Matplotlib(有Cartopy),GeoViews,ipyleaflet,Plotly

3.5 网络/图表

NetworkX,Plotly,Bokeh,HoloViews,Datashader

3.6 3D(网格,散点等)

SciVis库完全支持,还有Plotly,Matplotlib,HoloViews和ipyvolume的一些支持。

四、数据规模

每个库的体系结构和基础技术决定了所支持的数据大小,因此该库是否适用于大型图像,电影,多维数组,长时间序列,网格或其他相当大的数据集:

SciVis:通常可以使用编译数据库和本机GUI应用程序处理非常大的网格数据集,千兆字节或更大。

基于Matplotlib:通常可以处理数十万个具有合理性能的点,或者在某些特殊情况下处理更多(例如,取决于后端)。

JSON:由于需要文件大小和文本处理,JSON基于文本的数据编码在没有特殊处理的情况下将基于JSON的规范限制为几千个点到几十万个点。

Java:ipywidgets,Bokeh和Plotly都使用JSON,但使用额外的二进制数据传输机制来增强它,以便它们可以处理数十万到数百万个数据点。

WebGL:使用HTML Canvas的Java库限制为最多数十万个点,以获得良好的性能,但WebGL(通过ipyvolume,Plotly,在某些情况下为Bokeh)允许高达数百万。

服务器端呈现:Datashader或Vaex的外部InfoVis服务器端呈现允许在Web浏览器中提供数十亿,数万亿或更多数据点,方法是将任意大的分布式或核外数据集转换为固定大小的图像以嵌入客户端浏览器。

由于这些类型的库支持的数据大小范围广泛(因此在某种程度上数据类型),需要使用大尺寸的用户需要在一开始就选择合适的库。

用户界面和发布方式

各种库在可以使用图的方式上有很大不同。

静态图像:大多数图书馆现在可以无头操作来创建静态图像,至少在PNG中,通常采用平滑的矢量格式,如SVG或PDF。

原生GUI应用程序:SciVis库以及Matplotlib和Vaex可以创建特定于操作系统的GUI窗口,它提供高性能,支持大型数据集以及与其他桌面应用程序集成,但与特定操作系统绑定,通常需要在本地运行而不是通过网络。在某些情况下,嵌入基于Java的工具也可以通过嵌入Web浏览器嵌入到本机应用程序中。

导出为HTML:大多数Java和JSON库都可以在无服务器模式下运行,生成交互式绘图(缩放,平移等),可以通过电子邮件发送或发布到Web服务器上,而无需Python。

Jupyter笔记本:大多数InfoVis库现在支持Jupyter笔记本中的交互式使用,基于Java的Python支持。基于ipywidgets的项目提供与Jupyter更紧密的集成,而其他一些方法在Jupyter中仅提供有限的交互性(例如,当与Matplotlib而不是Bokeh一起使用时,HoloViews)。

独立的基于Web的仪表板和应用程序:Plotly图表可以在具有Dash的单独可部署应用程序中使用,Bokeh,HoloViews和GeoViews可以使用Bokeh Server进行部署。大多数其他InfoVis库可以使用新的Panel库部署为仪表板,至少包括Matplotlib,Altair,Plotly,Datashader,hvPlot,Seaborn,plotnine和yt。然而,尽管基于Web的交互性,基于ipywidgets的库(ipyleaflet,pythreejs,ipyvolume,bqplot)很难部署为面向公众的应用程序,因为Jupyter协议允许任意代码执行(但请参阅已解散的Jupyter仪表板项目和烧瓶-ipywidgets为潜在的解决方案)。

因此,用户需要考虑给定的库是否将涵盖他们对其可视化所期望的使用范围。

五、可视化发展趋势

正如您所看到的,Python提供了大量可视化功能,其方法和重点的多样性体现在大量可用的库中。方法之间的差异仍然很重要,并且具有深远的影响,这意味着用户需要在深入应用任何特定方法之前考虑这些差异。

END

来源:互联网摘抄

你可能感兴趣的:(python可视化库对比)