「Python」Python可视化库你知道多少?一文带你深入探讨( 二 )


JSON
由于像D3这样的JavaScript库已经成熟 , 它们的功能已经在声明性JSON规范(Vega , Vega-Lite)中捕获 , 因此可以轻松地从任何语言生成JavaScript , 现在包括Python(通过Altair和以前通过vincent) 。 将完整的绘图规范作为可移植JSON提供 , 允许集成到多种类型的工具中 。
WebGL
就像HTML5用于2D JavaScript绘图一样 , WebGL标准在浏览器和Jupyter中实现了3D交互性 , 从而导致基于three.js(pythreejs , ipyvolume) , vtk.js(itk-jupyter-widgets)构建的3D浏览器内绘图或者regl(Plotly) 。 这些基于Web的新3D方法都没有接近桌面SciVis 3D库的广度和深度 , 但它们确实允许与Jupyter笔记本完全集成 , 并通过Web轻松共享和远程使用 。 因此 , 即使WebGL工具与SciVis工具有一些共同的应用程序 , 它们也可能与其他InfoVis工具更紧密地联系在一起 。
其他许多其他库 , 甚至超出了Jake图中列出的库 , 提供了其他补充功能(例如用于可视化网络的graphviz) 。
可视化工具之间的区别按历史和技术进行的上述细分有助于解释我们如何获得当前丰富的Python viz包 , 但它也有助于解释为什么各种包之间的用户级功能存在如此重大差异 。 具体而言 , 支持的绘图类型 , 数据大小 , 用户界面和API类型之间存在重大差异 , 这使得库的选择不仅仅是个人偏好或方便性 , 因此了解它们非常重要:
绘图类型最基本的绘图类型在多个库之间共享 , 但其他库仅在某些库中可用 。 考虑到库的数量 , 绘图类型及其随时间的变化 , 很难精确地描述每个库中支持的内容 , 但是如果查看每个库的示例库 , 通常很清楚重点是什么 。
以下简略的分类下:
统计图(散点图 , 线条 , 面积 , 条形图 , 直方图):几乎所有InfoVis库都很好地支持 , 特别是 Seaborn , bqplot , Altair , ggplot2 , plotnine的主要功能支持 。
图像 , 常规网格 , 矩形网格:得到Bokeh , Datashader , HoloViews , Matplotlib , Plotly以及大多数SciVis库的支持
不规则的二维网格(三角网格):SciVis库以及Matplotlib , Bokeh , Datashader , HoloViews的良好支持
地理数据:Matplotlib(有Cartopy) , GeoViews , ipyleaflet , Plotly
网络/图表:NetworkX , Plotly , Bokeh , HoloViews , Datashader
3D(网格 , 散点等):SciVis库完全支持 , 还有Plotly , Matplotlib , HoloViews和ipyvolume的一些支持 。
数据规模每个库的体系结构和基础技术决定了所支持的数据大小 , 因此该库是否适用于大型图像 , 电影 , 多维数组 , 长时间序列 , 网格或其他相当大的数据集:
SciVis:通常可以使用编译数据库和本机GUI应用程序处理非常大的网格数据集 , 千兆字节或更大 。
基于Matplotlib:通常可以处理数十万个具有合理性能的点 , 或者在某些特殊情况下处理更多(例如 , 取决于后端) 。
JSON:由于需要文件大小和文本处理 , JSON基于文本的数据编码在没有特殊处理的情况下将基于JSON的规范限制为几千个点到几十万个点 。
JavaScript:ipywidgets , Bokeh和Plotly都使用JSON , 但使用额外的二进制数据传输机制来增强它 , 以便它们可以处理数十万到数百万个数据点 。
WebGL:使用HTML Canvas的JavaScript库限制为最多数十万个点 , 以获得良好的性能 , 但WebGL(通过ipyvolume , Plotly , 在某些情况下为Bokeh)允许高达数百万 。
服务器端呈现:Datashader或Vaex的外部InfoVis服务器端呈现允许在Web浏览器中提供数十亿 , 数万亿或更多数据点 , 方法是将任意大的分布式或核外数据集转换为固定大小的图像以嵌入客户端浏览器 。
由于这些类型的库支持的数据大小范围广泛(因此在某种程度上数据类型) , 需要使用大尺寸的用户需要在一开始就选择合适的库 。


推荐阅读