本篇博文是关于 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 万个点)需要像 Datashader 和 Vaex 这样的外部 Python 或 C 数据渲染程序,但服务器端数据渲染现在已经集成到多个基于 JavaScript 的库中,以便它们可以交互式使用(在 bqplot 中使用 Vaex,在 HoloViews、GeoViews、hvPlot 和现在的 Plotly 中使用 Datashader)。因此,现在有很多替代方案可用于在 Python 中处理真正庞大的 InfoVis 数据集。
Notebooks 中的 3D
以前,基于 OpenGL 的 3D 库只能在原生 GUI 环境中使用,但 Mayavi 现在支持在 Jupyter Notebooks 中的有限使用,从而可以更轻松地捕获和传播工作流程,并补充了来自 ipyvolume 和 Plotly 的仅浏览器 3D 功能。
Widget/应用支持
以前,为应用和小部件和仪表板提供支持的机制通常特定于 Python 绘图库,例如 Plotly 的 Dash 和 Bokeh 的 Bokeh Server/Bokeh Widgets。现在,各种各样的绘图库都支持与 ipywidgets 一起使用,使得在它们之间切换或根据特定 notebook 相关任务的需要将它们组合起来变得相对容易。这种广泛的支持使得在项目开始时对基于 ipywidgets 的库的特定选择变得不那么重要。许多不同的绘图库也可以与新的 Panel 应用/小部件库一起使用,可以使用 ipywidgets 风格的“interact”界面,也可以作为单独的对象使用,无论是在 Jupyter notebook 中还是在单独的服务器中(请参阅上面图像中的 示例应用,它结合了来自四个 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:我们何去何从?