这篇文章是关于 Python 数据可视化现状和 SciPy 2018 中出现的趋势的三部分系列文章中的第二部分。
在我 上一篇文章 中,我概述了目前可用的众多 Python 数据可视化工具,它们之间的关系以及它们之间的许多差异。在这篇文章中,我们将探讨 SciPy 2018 中出现的一个重要主题:收敛,即 Python 库随着时间的推移而成熟,并分享想法和方法,从而在功能上变得越来越相似。这些收敛趋势已经开始消除以前每个库之间的一些明显区别。这对用户来说很棒,但它确实让做出笼统的建议变得更加困难。与第一篇文章一样,我们通常会将 SciVis 项目(通常是位于现实世界空间中的 3D 绘图)与 InfoVis 项目(通常是位于页面或屏幕表面上的 2D 绘图,具有任意坐标轴)区分开来。
图像输出
像 Bokeh 和 Plotly 这样的 JavaScript InfoVis 库传统上专注于在 Web 浏览器中的交互式使用,并主要提供静态输出作为像素化屏幕截图(并且只有在互联网连接的情况下,例如 Plotly)。Bokeh 现在支持 PNG 和 SVG 输出,Plotly 图表可以通过 orca 导出到 PNG、SVG 或 PDF,因此这两个库现在都可以用于生成像 Matplotlib 衍生产品生成的出版质量图表。因此,用户不再需要在项目的开始就决定是否需要可扩展分辨率的静态输出。
大数据
以前,极大的 InfoVis 数据(超过 10 万或 100 万个点)需要外部 Python 或 C 数据渲染程序,例如 Datashader 和 Vaex,但服务器端数据渲染现在已被集成到几个基于 JavaScript 的库中,因此它们可以交互式使用(在 bqplot 中使用 Vaex,以及在 HoloViews、GeoViews、hvPlot 中使用 Datashader,现在还有 Plotly)。因此,现在在 Python 中处理真正大型的 InfoVis 数据集有很多替代方法。
笔记本中的 3D
基于 OpenGL 的 3D 库以前只能在本地 GUI 上下文中工作,但 Mayavi 现在支持在 Jupyter 笔记本中有限使用,从而可以更方便地捕获和传播工作流程,并补充 ipyvolume 和 Plotly 的仅浏览器 3D。
小部件/应用程序支持
以前,提供小部件和对应用程序和仪表盘的支持的机制通常特定于 Python 绘图库,例如 Dash for Plotly 和 Bokeh Server/Bokeh Widgets for Bokeh。现在,各种绘图库都支持使用 ipywidgets,从而可以使用它们之间的切换或根据需要将它们组合起来,以便相对轻松地完成特定于笔记本的任务。这种广泛的支持基础使得在项目的开始阶段,对基于 ipywidgets 的库的选择不太关键。许多不同的绘图库也可以与新的 Panel 应用程序/小部件库一起使用,无论是使用 ipywidgets 风格的“交互”界面还是作为单独的对象,无论是在 Jupyter 笔记本中还是在单独的服务器中(参见上图中的 示例应用程序,它将来自四个 Python 库的图表以及 R 的 ggplot2 相结合)。
事实上的 .plot() API 标准
pandas 绘图 API 已成为 2D 图表的实际标准,在 Pandas 数据帧上使用类似的调用集现在可以生成使用 Matplotlib(在 Pandas 中原生)、Vega-lite(通过 pdvega)、Plotly(通过 cufflinks)或 Bokeh(通过 hvPlot)生成的图表。hvPlot 还为许多其他数据库(xarray、GeoPandas、Dask、Intake、Streamz)提供了相同的绘图 API,使用户在许多情况下可以学习使用 Pandas 的一组绘图命令,然后将它们应用于各种库以获得静态或交互式图表。
接下来会发生什么?
这些收敛趋势意味着,用户不再完全无法访问其他类型的功能,即使他们选择了某个特定的 Python 可视化库或类型的库。因此,尽管在本系列文章的第一篇博文中概述的不同历史和起点仍然重要,但它们的影响不再像前几年那样严重。尽管如此,对于新用户来说,仍然有如此多的 Python 可视化库可供选择,这仍然令人困惑,这就是我和 Python 可视化社区的其他代表在 SciPy 2018 上花费时间讨论如何简化这些库并将用户引导到更少的起点的原因。要了解更多关于我们对 Python 数据可视化未来的愿景,请继续关注本系列的 第三部分,*Python 数据可视化 2018:我们从哪里开始?*。