本篇将接着上篇,根据Python可视化工具等级关系分类,依次对每类做一个概述,并对每类的重点库进行简要介绍。
Core,核心库
这一类有3个库,分别是:
- matplotlib
- plotly
- bokeh
为什么称它们为核心库呢?因为,有多个其它高级可视化库是在它们的基础上构建的。
**注意:**这里的高级、低级是指它们语法的封装程度,是相对的,并不是指它们的功能是否高级。
**matplotlib:**前面已说得很多了,基于它再开发的库就有十几个。
**plotly:**是一个可交互,基于浏览器的绘图库,主打功能是绘制在线可交互的图表。plotly绘制的图能直接在jupyter中查看,也能保存为离线网页,或者保存在plot.ly云端服务器内,以便在线查看。
cufflinks 库就是基于plotly+pandas再开发的。
**Bokeh:**是一个专门针对Web浏览器呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别。
- 专门针对Web浏览器的交互式、可视化Python绘图库
- 可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js。
- 独立的HTML文档或服务端程序
- 可以处理大量、动态或数据流
- 支持Python (或Scala, R, Julia…)
- 基于Javascript,但不需要使用Javascript
Chartify可视化库就是基于Bokeh创建。
High-Level Shared API,高级共享API
构建在核心Python或JS库之上,共享panda .plot() API的库。
这一类有6个库:
- pandas
- xarray
- cufflinks
- hvplot
- Pandas-Bokeh
- pdvega
它们的特点是共享panda.plot() API,提供了对pandas的DataFrame数据结构的支持。
pandas:
通过导入matplotlib.pyplot,将pyplot的函数进一步封装为DataFrame的方法,实现了两个目标:
- 简便、快速的绘图方式;
- 对DaraFrame的支持。
由此可见,你如果熟练掌握了matplotlib,掌握pandas中的绘图不需要走过10分钟的时间。
**xarray:**多维数组中的绘图。在Pandas早期版本中有一个xarray数组,后来把这一部分完全交由xarray库处理。多维(又名N维,ND)阵列(有时称为“张量”)是计算科学的重要组成部分。它涉及广泛的领域,包括物理学,天文学,地球科学,生物信息学,工程学,金融学和深度学习。在Python中,NumPy提供了用于处理原始ND阵列的基本数据结构和API。但是,真实世界的数据集通常不仅仅是原始数据; 它们有标签,用于编码有关数组值如何映射到空间,时间等位置的信息。
xarray绘图功能是matplotlib库的一个薄包装器 。
**cufflinks:**基于plotly+pandas再开发的。当然是要结合两个的优势了。提供了对pandas数据的支持,和plotly的交互式功能。
Pandas-Bokeh: 顾名思义,Pandas和Bokeh的结合。
**hvplot:**Python数据生态系统有许多核心Python数据容器,允许用户使用各种数据类型,包括:
- Pandas:DataFrame,Series(柱状/表格数据)
- XArray:Dataset,DataArray(多维数组)
- Dask:DataFrame,Series,Array(分布式/核心数组和列数据)
- Streamz:DataFrame(s),Series(s)(流式柱状数据)
- Intake:DataSource(数据目录)
- GeoPandas:GeoDataFrame(几何数据)
- NetworkX:图表(网络图)
其中一些库具有高级绘图API的概念,使用户可以非常轻松地生成常见的绘图类型。本机绘图API通常基于Matplotlib构建,它提供了坚实的基础,但现代交互式绘图库(如Bokeh和HoloViews)的功能较弱。
hvPlot提供了一个基于HoloViews的高级绘图API,它提供了一个通用且一致的API,用于绘制所有上述格式的数据。
hvPlot是PyViz计划的一部分,旨在使基于Python的可视化工具能够很好地协同工作。
**pdvega:**使用与pandas内置可视化工具几乎相同的API 快速基于DataFrame数据创建交互式图表,可以在Jupyter notebook中轻松使用。
High-Level,高级库
InfoVis组的5个库,专注于数据可视化的高级操作,构建在核心Python或JS库之上。
- **seaborn,**基于matplotlib,特长在绘制统计图形。
- **altair,**基于Vega-Lite JSON规范构建,特点在统计、简洁、美观。
- holoviews,基于Plotly, Matplotlib的OO接口,Bokeh的SVG导出,3D支持,提供了web绘图和交互式绘图功能;这是PyViz的发展方向–“融合”
- **plotly_express,**顾名思义,plotly的进一步封装,复杂图表的简单语法。
- **chartify,**从它官方宣称的“可以让数据科学家轻松创建图表”,就两个字进一步的”封装“。
Native-GUI,本机GUI
InfoVis组的5个库,目标是获得用于交互式绘图的本机桌面GUI界面。
- pyqtgraph
- glue: 多个文件的交互式链接统计图形,用于探索相关数据集内部和之间的关系。
- **chaco:**交互式二维绘图。
- **veusz:**一个2D和3D科学绘图包,旨在简单。
- gr: 跨平台可视化应用程序的通用框架。它为开发人员提供了一个紧凑,可移植且一致的图形库。
该类最重要的是:PyQtGraph:
PyQtGraph 旨在提供工程和科学应用程序通常所需的图形和用户界面功能。其主要目标是:
- 提供快速,交互式图形以显示数据(图表,视频等)
- 提供工具以帮助快速应用程序开发(例如,Qt Designer中使用的属性树)。
PyQtGraph虽然是开源项目,但版权属于北卡罗来纳大学教堂山分校。
PyQtGraph通过PyQt或PySide大量使用Qt GUI平台来获得高性能图形,使用numpy来支持大量高速运算。特别是使用Qt的GraphicsView框架提供了功能强大的图形系统。
pyqtgraph的核心功能包括:
- 基本数据可视化基元:图像,线和散点图
- 足够快,可以实时更新视频/绘图数据
- 交互式缩放/平移,平均,FFT,SVG / PNG导出
- 用于标记/选择绘图区域的小部件
- 用于标记/选择图像感兴趣区域并自动切片多维图像数据的小部件
- 用于构建定制图像感兴趣区域小部件的框架
- 取代/补充Qt的对接系统,以允许更复杂(和更可预测)的对接安排
- ParameterTree小部件,用于动态接口的快速原型设计(类似于Qt Designer和许多其他应用程序中的属性树)
pyqtgraph-3d
Other InfoVis,其它信息可视化库
InfoVis绘制不适合上述其他类别的库。
- pygal,一个用python编写的动态SVG(Scalable Vector Graphics)图表库。SVG意为可缩放的矢量图形,它是基于XML(Extensible Markup Language)。
- **plotnine,**是Python 中对ggplot2图形语法的一种实现,允许用户通过将数据显式映射到构成绘图的可视对象来组合绘图。 是一位德国学者完成的,它几乎是对R ggplot2绘图包的移植。
- **bqplot:**使用pythonic API为二维可视化提供统一的框架,为添加用户交互提供合理的API(平移,缩放,选择等)
- **toyplot:**toy,玩具,这是Python版的一款适合儿童的绘图工具包。
- **biggles:**一个Python模块,用于创建出版品质的2D科学图,看不出有什么特点。
SciVis
用于可视化真实坐标(地理空间、物理空间)中的科学数据的库,通常使用OpenGL或WebGL。物理、环境科学人士关注的类,与我等草根的距离太远了。
- **VTK:**VTK 包括许多高级算法(例如,表面重建,隐式建模)和渲染技术,被院士级人士用于教学和研究 。
- **vispy:**Python中的交互式科学可视化,特点:3D, 立体,交互,大量数据。
- pyvista
- mayavi
- ipyvolume
- glumpy
- itk-jupyter-widgets
Geospatial,地理空间
处理地理坐标数据的工具。GIS紧密相关。
- **geopandas:**GeoPandas是一个向pandas对象添加地理数据支持的项目 。
- **folium:**folium基于Python生态系统的数据处理优势和leaf .js库的映射优势。使用Python操作数据,然后通过folium在单张地图中可视化数据。
- **cartopy:**旨在使数据分析和可视化的绘制地图变得容易。
- **gmplot:**Cartopy是一个Python包,旨在使数据分析和可视化的绘图地图变得容易。
- **ipyleaflet:**Jupyter / Leaflet 之间的桥梁,可在Jupyter笔记本中实现交互式地图。
- geoviews:…
- geoplotlib:…
- geoplot:…
Other domain-specific,其它特定领域的包
专注于特定的研究或应用领域绘图、图像处理工具包。
- **networkx:**绘制网络图。
- **scikit-image:**用于图像处理
- **missingno:**提供了一个灵活且易于使用的缺失数据可视化和实用程序的小工具集,使您可以快速直观地总结数据集的完整性(或缺少)。
- **yellowbrick:**可视化分析和诊断工具,方便机器学习模型选择。
- **yt:**yt支持结构化,可变分辨率网格,非结构化网格以及离散或采样数据(如粒子)。专注于推动物理上有意义的探究,已经应用于诸如天体物理学,地震学,核工程,分子动力学和海洋学等领域。
- **hypertools:**HyperTools旨在促进降维 -基于高维数据的视觉探索。基本路径是输入高维数据集(或一系列高维数据集),并在单个函数调用中,减少数据集的维度并创建绘图。
- **scikit-plot:**机器学习领域。
- **clustergrammer2:**构建交互式热图的Jupyter小部件。
- **arviz:**一个用于贝叶斯模型探索性分析的Python软件包。包括后验分析,模型检查,比较和诊断功能。
根据你研究的领域去进一步地了解吧!
Large-data rendering,大数据集渲染
用于在可视化之前对服务器端数据进行栅格化/聚合的工具。
- **datashader:**Datashader是一个数据栅格化管道,用于创建大量数据的有意义表达。
- **vaex :**Vaex是一个用于可视化和探索大表格数据集。它可以 在N维网格上计算每秒超过十亿个对象/行的*统计数据,*例如平均值,总和,计数,标准偏差等 。可视化使用直方图,密度图和3d体积渲染完成,允许交互式探索大数据。
Dashboarding,仪表板
用于创建动态的python支持的web应用程序或仪表板的库,用户可以与这些库交互来探索或分析数据。
- dash
- panel
- voila
Colormapping,颜色映射
用于生成新颜色映射的颜色映射和工具的集合。
- palettable
- colorcet
- cmocean
- viscm
Dormant projects
作者已不再开发和维护的工具。
- basemap
- d3po
- galry
- ggpy
- gleam
- leather
- lightning
- mpld3
- PyQwt
- vincent
- visvis
你不会去学习和使用它们吧。
未完待续 篇幅有点长了,如何选择适合你的Python数据可视化工具,下篇接着聊。