本文是关于Python数据可视化工具状态和SciPy 2018中出现的趋势的三部分系列文章中的第一篇。

作者:James A.Bender

在奥斯汀举行的SciPy 2018特别会议上,各种开源Python可视化工具的代表分享了他们对Python数据可视化未来的看法。

我们听到了关于Matplotlib,Plotly,VisPy等的更新。

我作为PyViz,GeoViews,Datashader,Panel,hvPlot和Bokeh的代表参加了SciPy

2018,我的Anaconda同事Jean-Luc Stevens也代表HoloViews参加了本次会议。

第一篇文章调查了目前可用的软件包,并展示了它们之间的关联方式,随后的帖子将讨论这些工具近年来如何发展,以及它们今后的发展。

当前的处境

我展示了Jake VanderPlas对Python中许多不同可视化库当前如何相互关联的概述,以便开始我的表述

在这张图中,你可以清晰的看到一些主要的函数库分组,他们中的每个都有不同的起点,历史,以及侧重。

其中一个很明显的独立的组是“Scivs”库,这个库(在图片的左下角)用来显示可视化数据的物理位置,这些工具(Vispy,

glumpy, GR, Mayavi, ParaView,VTK and

yt)基本上是基于1992年的OpenGL标准创建的,在三维甚至是四维(三维+时间)上显示对于常规或不规则网格化数据物理过程的图形密集可视化。

其他几乎所有的库都属于“InfoVis”组,专注于随机领域中信息的可视化,而不一定是三维物理领域。 InfoVis库使用二维的打印页面或计算机屏幕来解释抽象空间,通常使用轴和标签。

InfoVis库可以进一步细分为多个子组

Matplotlib

2003年发布的最古老,最受欢迎的InfoVis库之一,具有非常广泛的2D绘图类型和输出格式。

Matplotlib还早于HTML5对丰富的Web应用程序的支持,而是使用桌面GUI工具包(如Qt和GTK)将重点放在静态图像上以及交互式图形上。

Matplotlib包含一些3D支持,但相比于SciVis库有更多的使用限制。

Matplotlib-based

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

JavaScript

自从HTML5在浏览器中实现了丰富的交互性,许多库就会为网页和Jupyter笔记本提供交互式2D图片,使用自定义JS(Bokeh,Toyplot)或主要包装现有的JS库如D3(Plotly,bqplot))。

包装现有的JS可以轻松添加为大型JS市场创建的新图(就像Plotly一样),而使用自定义JS可以定义更低级的JS基元,可以在Python中组合成全新的绘图类型(如Bokeh)。

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)或者regl(Plotly)构建的3D浏览器内绘图。这些新的基于Web的3D方法都没有接近桌面SciVis

3D库的广度和深度,但它们确实可以与Jupyter笔记本完全集成,并通过Web轻松共享和远程使用。

因此,即使WebGL工具与SciVis工具有一些共同的应用程序,事实上它与其他的InfoVis工具更紧密地联系在一起。

其他

许多其他库,已经超出了Jake图中列出的库,它们提供了其他补充功能(例如用于可视化网络的graphviz)。

Viz工具之间的区别因素

按历史和技术进行的上述细分有助于解释我们如何获得当前丰富的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-based:通常可以处理数十万个具有合理性能的点,或者在某些特殊情况下处理更多(例如,取决于后端)。

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

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

WebGL:为获得良好的性能,使用HTML Canvas的JavaScript库限制为最多数十万个点,

但WebGL(通过ipyvolume,Plotly,在某些情况下为Bokeh)允许高达数百万。

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

由于这些类型的库支持的数据大小范围广泛,需要处理大量数据的用户需要在开始时选择适当的库。

用户界面和发布

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

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

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

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

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

独立的基于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为潜在的解决方案)。

因此,用户需要考虑给定的库是否将涵盖他们对其可视化的需求。

API类型

各种InfoVis库提供了大量的编程接口,适用于不同类型的用户以及不同创建可视化的方式。这些API在执行常见任务需要多少代码以及它们为用户处理不常见任务以及将基元组成新类型图表时提供多少控制方面有所不同:

面向对象的Matplotlib

API:Matplotlib的主要API,允许完全控制和组合,但不适用复杂和高度冗长的一些常见任务,如创建子图。

命令式Pyplot

API:Matplotlib的基本界面允许使用Matlab风格的命令式命令,这些命令对于简单的情况而言非常简洁,但是集成度不高,因此主要应用于特定的受支持选项。

命令式Pandas .plot()

APIs:以数据框为中心,用户将主要在Pandas中准备数据,然后选择一个子集进行绘图。正如将在本系列的下一篇文章中讨论的那样,这种方式现在支持广泛的图表库以及其他数据结构,使它们成为拥有广泛支持的基本绘图命令的用基本集合。尽管不是直接组合,但可以从底层绘图库返回可组合对象(如hvPlot)。

声明性图形API:Graphics-

inspired库的语法,如ggplot,plotnine,Altair和Bokeh(在某种程度上)提供了一种自然的方式来组合图形基元,如轴和字形,以创建完整的视图。

声明性数据API:基于其他库的原生API,HoloViews和GeoViews提供了更高级别的声明和组合API,专注于注释,描述和处理可视化数据,而不是绘图元素。

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

新兴趋势

正如您所看到的,Python提供了大量可视化功能,其方法和侧重的多样性体现在大量可用的库中。

方法之间的差异仍然很重要,并且具有深远的影响,这意味着用户需要在深入学习任何特定方法之前考虑这些差异。 但正如我们在SciPy

2018所看到的那样,整合的趋势使得库的选择不再那么重要。

要了解有关这些新兴趋势的更多信息,请继续关注本系列的第二部分,Python数据可视化2018:走向整合。

python基于web可视化_python可视化(转载)相关推荐

  1. python基于web可视化_独家 | 基于Python实现交互式数据可视化的工具(用于Web)

    转自:数据派ID:datapi 作者:Alark Joshi 翻译:陈雨琳 校对:吴金笛 本文2200字,建议阅读8分钟. 本文将介绍实现数据可视化的软件包. 这学期(2018学年春季学期)我教授了一 ...

  2. Uber开源基于web的自主可视化系统,可共享数据

    研究公司ABI的数据显示,到2025年,将有800多万辆无人驾驶汽车出现在公共道路上,它们都有一些共同点:传感器.功能强大的个人电脑和机器学习算法.Nvidia.英特尔的Mobileye.百度等公司提 ...

  3. 利用python预测交通拥堵_Python可视化轻松展示交通拥堵情况

    作者:不正经的kimol君 源自:Python干货铺子 就在今天,我感受到了来自堵车的深深恶意.没有错!我今天被堵在路上近乎3个小时,美好的约会就这样化为泡影了. 我倒还真想看看这路到底能有多堵.于是 ...

  4. [附源码]计算机毕业设计Python基于web的羽毛球管理系统(程序+源码+LW文档)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

  5. python基于web可视化_Python Selenium实现无可视化界面

    有时候我们爬取网页数据,并不希望看其中的过程,只想看到最后的数据结果就可以了,这时候,***面就很有必要了! 代码如下 from selenium import webdriver from time ...

  6. python基于web可视化_Python数据可视化:基于Bokeh的可视化绘图

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  7. python数据分析常用包_python可视化数据分析常用图大集合(收藏)

    python数据分析常用图大集合:包含折线图.直方图.垂直条形图.水平条形图.饼图.箱线图.热力图.散点图.蜘蛛图.二元变量分布.面积图.六边形图等12种常用可视化数据分析图,后期还会不断的收集整理, ...

  8. Python使用Web API数据可视化

    Web应用编程接口 (API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化.由于这样编写的程序始终使用最新的数据来生成可视化,因此即便数据瞬息万变,它呈现的信息也都是最新的. Web ...

  9. python 可视化_Python可视化|Matplotlib40LaTeX in Matplotlib和python

    "pythonic生物人"的第94篇分享. 本文介绍如何在Matplotlib中使用LaTeX 公式和符号.Python如何生成LaTeX数学公式. 本文速览 本文速览1.Matp ...

最新文章

  1. FiM | 牧医所奶业创新团队建立瘤胃微生物脲酶的靶向宏蛋白质组方法
  2. oracle 序列号同步,关于序列同步的问题
  3. 251f与ips屏显示器对比_1千多元预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(2k+高色域屏)...
  4. Java 必会的 9 大技能,我请部门大神给你讲讲
  5. Myxls导出excel报表
  6. python控制单片机keil_PCF8591使用及Python控制
  7. word2vec原理(三): 基于Negative Sampling的模型
  8. linux支持sshd救援模式,单用户、救援模式、克隆、两机互联
  9. Redis的主从复制是如何做的?复制过程中也会产生各种问题
  10. centos7安装python3及pip3更新_CentOS7下安装Python3及Pip3并保留Python2
  11. 凸优化第六章逼近与拟合 作业题
  12. echarts地图文字重叠解决方案_踩坑日记:在Echarts中国地图踩到的坑
  13. 计算机网络 8 报文交换和分组交换2
  14. 克隆巴赫系数 Cronbach‘s alpha 及 R, Python 实现
  15. java mysql 公交车换乘查询算法_公交车路线查询系统后台数据库设计--换乘算法改进与优化...
  16. 预装windows 8 系统GPT模式的ThinkPad T440改装64位 windows 7旗舰版
  17. html5如何修改登录页面的背景,HTML5 月夜背景的用户登录界面
  18. 一周玩转示波器(六)
  19. 知网文献使用EndNote X9在word插入参考文献
  20. sql:mysql:分词

热门文章

  1. 快讯:Oracle 发布了传闻已久的 18.3 RPM 安装版本
  2. 为啥你写的代码总是这么复杂?
  3. 亿级大表在线不锁表变更字段与索引
  4. 【DevCloud·敏捷智库】如何利用故事点做估算
  5. 非编程人学Python,要注意哪些隐秘的错误认知?
  6. 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(4)
  7. linux 修改hba参数,更改Raid卡和HBA卡在linux下的启动顺序
  8. mac安装win7之后鼠标失灵_排雷之后终于找到了解决mac安装Homebrew的报错
  9. MapReduce入门和优化方案
  10. pip安装neural_renderer报错的解决方法