写点什么

Python 数据可视化 2018:数据可视化库为什么这么多?

  • 2018-12-07
  • 本文字数:4123 字

    阅读完需:约 14 分钟

Python数据可视化2018:数据可视化库为什么这么多?

本文最初发布于 Anaconda 开发者博客,经原作者授权由 InfoQ 中文站翻译并分享。


在奥斯汀举行的SciPy 2018年特别会议上,大量开源 Python 可视化工具的代表分享了他们对 Python 数据可视化未来的展望。我们看到了MatplotlibPlotlyVisPy等许多库的更新。我作为PyVizGeoViewsDatashaderPanelhvPlotBokeh的代表参加了 SciPy 2018 大会,我在 Anaconda 的同事 Jean-Luc Stevens 则代表HoloViews参加。本文介绍了当前可用的软件包以及它们之间的关系。

当前生态

作为背景介绍,我先展示 Jake VanderPlas 的概览图,其中有许多不同而又相互关联的 Python 可视化库:



从中可以看到,这些库主要可以分成几组,每个组都有不同的起源、历史和关注点。显然,可视化物理位置数据的“SciVis”库(在图左下方)可以单独分成一组。这些工具(VisPyglumpyGRMayaviParaViewVTKyt)主要是基于 1992 年 OpenGL 图形标准构建的,为规则或不规则网格数据提供了三维或四维(3D 加上时间维度)物理过程图形密集可视化。这些库对富 Web 应用程序的支持早于 HTML5,通常侧重于工程或科学环境中的高性能桌面 GUI 应用程序。


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

Matplotlib

2003 年发布的最古老也最受流行的 InfoVis 库之一,具有非常广泛的 2D 绘图类型和输出格式。Matplotlib对富 Web 应用程序的支持也早于 HTML5,而其侧重点放在了静态图像和使用桌面 GUI 工具包(如 Qt 和 GTK)的交互式图形上。Matplotlib 提供了一些 3D 支持,但比 SciVis 库提供的支持要有限得多。

基于 Matplotlib 的库

多年来,许多工具都是基于 Matplotlib 的 2D 绘图功能构建的,要么将它作为某类数据或某一领域(pandasNetworkXCartopyyt等)的渲染引擎,要么提供一个更高级的 API 来简化图形绘制(ggplotplotnineHoloViewsGeoViews等),要么添加了额外的图形类型(seaborn等)。

JavaScript

在 HTML5 为浏览器带来丰富的交互性之后,许多库就开始为网页和 Jupyter Notebook 提供交互式 2D 绘图,要么使用定制的 JS(BokehToyplot) ,要么像 D3 一样以封装现有的 JS 库为主(Plotlybqplot)。通过封装现有的 JS 库,很容易在巨大的 JS 市场引入新的图形,而使用自定义 JS 则允许定义较底层的 JS 原语,这些原语可以在 Python 中组合成全新的图形类型(如 Bokeh)。

JSON

随着 D3 这样的 JavaScript 库日趋成熟,它们的功能已经被纳入声明性 JSON 规范(VegaVega-Lite),使得适用任何语言生成 JavaScript 图形变得更简单,现在也包括了 Python(通过Altair,之前是通过vincent)。具有可移植 JSON 形式的完整绘图规范允许跨多种工具进行集成。

WebGL

就像 HTML5 对 JavaScript 2D 绘图所做的那样,WebGL 标准为浏览器 3D 交互和 Jupyter 带来了可能性,这导致了基于 three.js(pythreejsipyvolume) 、vtk.js(itk-jupyter-widgets) 或 regl (Plotly)的浏览器 3D 绘图。这些新的基于 Web 的 3D 方法没有一种能够达到桌面库 SciVis 3D 的广度和深度,但是,它们确实可以与 Jupyter Notebook 完全集成,并且可以通过 Web 进行共享和远程使用。因此,尽管 WebGL 工具与 SciVis 工具有一些共同的应用,但它们与其他 InfoVis 工具的关系更为紧密。

其他

还有其他很多库,尽管没有出现在 Jake 的图中,但它们确实提供了其他补充功能(例如graphviz用于可视化网络)。

不同可视化工具的差异化特质

以上基于历史和技术的分类有助于解释我们当前为什么有大量 Python 可视化程序包,同时,它也有助于解释为什么不同包之间在用户功能方面存在着如此大的差异。具体来说,它们的主要差别在于支持的绘图类型、数据规模、用户界面和 API 类型,因此在选择库时不能只是出于个人喜好或便利性,而是需要考虑到以下一些因素。

绘图类型

最基本的绘图类型许多库都有,但其他的绘图类型只有某些库会提供。考虑到库的数量、绘图类型及它们在随时间变化,很难精确地描述每个库都支持什么。但是,如果你看一下每个库的示例,通常就可以弄清楚它们各自的侧重点是什么。下面是一个粗略的指南:


  • 统计绘图(散点图、线、区域、条形图、直方图):几乎所有的 InfoVis 库都可以很好地覆盖这些图形,但 Seaborn、bqplot、Altair、ggplot2、plotnine 会比较侧重这些;

  • 图像、规则网格、矩形网格:Bokeh、Datashader、HoloViews、Matplotlib、Plotly 及大多数 SciVis 库都提供了很好的支持;

  • 不规格 2D 网格(三角网格):SciVis 库以及 Matplotlib、Bokeh、Datashader、HoloViews 提供了很好的支持;

  • 地理数据:Matplotlib(和 Cartopy 一起)、GeoViews、ipyleaflet、Plotly;

  • 网络/图:NetworkX、Plotly、Bokeh、HoloViews、Datashader;

  • 3D(网格、散点等):SciVis 库完全支持,Plotly、Matplotlib、HoloViews 和 ipyvolume 部分支持。

数据规模

每个库的架构和底层技术决定了它们所支持的数据规模,这样就可以知道该库是否适用于大图片、电影、多维数组、长时间序列、网格或其他大型数据集:


  • SciVis:通常可以处理非常大的网格数据集,GB 级别或更大,它使用编译过的“数据库(data libraries)”和原生 GUI 应用程序;

  • 基于 Matplotlib:通常可以处理几十万个点,并提供合理的性能,在某些特殊情况下可以处理更多的点;

  • JSON:如果没有特殊处理,基于 JSON 文本的数据编码会将基于 JSON 的规范限制在几千个点到几十万个点之间,这取决于文件大小和所需的文本处理;

  • JavaScript:ipywidgets、Bokeh 和 Plotly 都使用 JSON,但增加了额外的二进制数据传输机制,以便能够处理数十万到数百万个数据点;

  • WebGL:为了获得良好的性能,使用 HTML Canvas 的 JavaScript 库限制在最多几十万个点,但是 WebGL(通过 ipyvolume、Plotly 或 Bokeh)最多支持数百万个点;

  • 服务器端渲染:来自 Datashader 或 Vaex 的外部 InfoVis 服务器端渲染支持数十亿、数万亿或更多数据点进入 Web 浏览器,通过将任意大小的分布式数据集或非核心数据集转换为固定大小的图像嵌入到客户端浏览器中。


由于这些类型的库所支持的数据规模(在某种程度上可以说是数据类型)范围很大,因此,需要使用大型数据集的用户首先需要选择合适的库。

用户界面和发布

各种类型的库在图形的使用方式方面存在巨大差异。


  • 静态图像:大多数库现在支持通过“headless”的方式来创建静态图像,至少对于 PNG 和平滑矢量格式(如 SVG 或 PDF)来说是这样的。

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

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

  • Jupyter Notebook:大多数 InfoVis 库现在都支持 Jupyter Notebook 交互式应用,借助 Python 提供的基于 JavaScript 的绘图。基于 ipywidgets 的项目提供了与 Jupyter 更紧密的集成,而其他一些方法只提供了有限的 Jupyter 交互性。

  • 基于 Web 的仪表盘和应用程序:借助Dash,Plotly 图形可以用于单独部署的应用程序,Bokeh、HoloViews 和 GeoViews 可以使用Bokeh服务器部署。大多数其他 InfoVis 库可以使用新的Panel库部署成仪表盘,比如 Matplotlib、Altair、Plotly、Datashader、hvPlot、Seaborn、plotnine 和 yt。然而,尽管它们提供了基于 Web 的交互性,但基于 ipywidgets 的库(ipyleaflet、pythreejs、ipyvolume、bqplot)很难部署成面向公众的应用程序,因为 Jupyter 协议允许执行任意代码(请参考Jupyter仪表盘和flask-ipywidgets,它们或许可以作为潜在的解决方案)。


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

API 类型

各种 InfoVis 库提供了大量的编程接口,适用于各种差别很大的用户,并提供了不同创建可视化的方式。在执行普通任务所需的代码量、为用户处理不常见任务提供多大的控制自由度以及将原语组合成新类型图形方面,这些 API 存在巨大的差别。


  • 面向对象的 Matplotlib API:Matplotlib的主要API,允许完全控制和组合,但对于一些常见的任务,如创建子图,则非常复杂和繁琐。

  • 命令式 Pyplot API:Matplotlib的基本接口,允许使用 Matplotlib 风格的命令式命令,对于比较简单的情况,这些命令很简洁,但不可组合。因此,它们在很大程度上仅限于一组特定的支持选项。

  • 命令式 Pandas .plot() API:以 dataframe 为中心,用户将主要通过 Pandas 来准备数据,然后选择一个子集进行绘图。它们现在支持各种图形库及其他数据结构。不是直接组合,但可以从底层绘图库(如 hvPlot)返回可组合的对象。

  • 声明式图形 API:受“图形语法( Grammar of Graphics)”启发的库(如 ggplot、plotnine、Altair)和 Bokeh 提供了一种自然的方式来组合图形原语(如坐标轴和符号),用来创建完整的图形。

  • 声明式数据 API:构建在其他库的原生 API 的基础上,HoloViews 和 GeoViews 提供了一个更高级的声明式复合 API,主要关注注解、描述和使用可视化数据,而不是绘图元素。


这些 API 都适用于具有不同背景和目标的用户,这使得处理一些任务变得更简单,而另一些任务则变得更加困难。除了 Matplotlib 之外,大多数库都支持一种或至多两种备选 API。因此,选择一个符合每个用户技术背景和首选工作流的库显得非常重要。

最新趋势

如你所见,Python 有大量的可视化功能库,大量可用的库反映出了方法和侧重点的多样性。方法之间的差异仍然很重要,并且具有深远的影响,这意味着用户在特定的方法上大幅投入之前需要考虑这些差异。但是,正如我们在 SciPy 2018 上看到的那样,趋同趋势降低了用户选择的关键性。


查看英文原文:https://www.anaconda.com/blog/developer-blog/python-data-visualization-2018-why-so-many-libraries


2018-12-07 18:304068
用户头像

发布了 1008 篇内容, 共 401.2 次阅读, 收获喜欢 345 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

MES系统是什么?MES软件有什么用?

万界星空科技

制造业 生产管理系统 mes 万界星空科技 生产管理

macOS Sonoma 14.6.1 (23G93) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO Sonoma

观测云产品更新 | 异常追踪、用户访问监测、链路、监控等

观测云

异常追踪

全国高校软件测试开发教学师资培训会圆满落幕

霍格沃兹测试开发学社

永久激活版Trapcode Particular AE 3D粒子插件详细安装教程

理理

海外成品语聊交友软件APP(英语+阿拉伯语版本)相比定制研发,优势有哪些?

山东布谷科技胡月

源码搭建 语音直播源码 语音聊天APP源码 海外直播App开发 海外语聊APP

高价值数据源于结构化和非结构化融合分析

AI数据云Relyt

数据仓库 数据湖 数据分析 非结构化数据 AI-ready Data Cloud

和鲸科技助力 Datathon 会前培训成功举行,“理-工-医-信”跨学科合作,以数据驱动医疗实践

ModelWhale

医疗AI R 语言 datathon 医疗大数据

技术同学如何应对降薪裁员

老张

职场 裁员 认知 互联网裁员

使用观测云构建业务的可观测性

观测云

可观测性 业务监控

AI自动化应用开发,让创意与效率并驾齐驱!

霍格沃兹测试开发学社

不可重复读和幻读有什么区别

江南一点雨

Java MySQL 面试题

iMovie 剪辑 for mac中文版:创建好莱坞风格预告片和精美影片

理理

视频特效 Mac视频剪辑软件 iMovie 剪辑

【AIGC】 0成本学习:AI工作流生成Joy(ComfyUI)

京东零售技术

AIGC 企业号 8 月 PK 榜

云图说|一图告诉你主机安全的运维效率如何提升超出预期

华为云开发者联盟

运维 主机安全 新版本 企业号 8 月 PK 榜 2024企业号8月pk

危化品安全生产风险监测预警系统的构建与实施

天津汇柏科技有限公司

安全生产 安全生产平台

聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景方案

字节跳动数据平台

数据库 云原生 Clickhouse 数仓

和鲸科技CEO范向伟出席江苏省信息技术应用学会软件技术专委会学术年会,解读“AI+教育”创新实践

ModelWhale

人工智能 软件 信息技术 产学研

京东企业业务前端监控实践

京东零售技术

前端 监控 企业号 8 月 PK 榜

全国高校软件测试开发教学师资培训会圆满落幕

测试人

软件测试

Embedding空间中的时序异常检测

百度Geek说

安全 异常检测

Reflector 3:将iPhone、iPad、iPod Touch屏幕投屏到mac电脑上

理理

Mac软件 iOS投屏 Reflector 3激活版 Reflector 3下载

LED显示屏行业可突破的六大领域

Dylan

云计算 虚拟现实 LED显示屏 全彩LED显示屏 led显示屏厂家

macOS Ventura 13.6.9 (22G830) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO ventura

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

测试人

软件测试

如何保护您的 Angular 应用程序:API 调用的端到端加密

哦豁完蛋了

AI安全新纪元:智能体驱动的网络安全新范式

云起无垠

AI 智能体

Enfocus PitStop Pro:PDF编辑与印前检查的一站式解决方案

理理

Enfocus PitStop Pro 2021 PDF 编辑器和注释器

我叫小舞,跳舞的舞!新斗罗大陆游戏详细图文架设教程

echeverra

斗罗大陆

数据分析慢?火山引擎ByteHouse发布六大场景性能提升方案

字节跳动数据平台

数据库 云原生 OLAP 数仓

聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景方案

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 数仓

Python数据可视化2018:数据可视化库为什么这么多?_语言 & 开发_James A. Bednar_InfoQ精选文章