選擇適合你的Python可視化工具(續(xù))
本篇將接著上篇,根據(jù)Python可視化工具等級關(guān)系分類,依次對每類做一個概述,并對每類的重點庫進(jìn)行簡要介紹。
Core,核心庫
這一類有3個庫,分別是:
- matplotlib
- plotly
- bokeh
為什么稱它們?yōu)楹诵膸炷??因為,有多個其它高級可視化庫是在它們的基礎(chǔ)上構(gòu)建的。
注意:這里的高級、低級是指它們語法的封裝程度,是相對的,并不是指它們的功能是否高級。
matplotlib:前面已說得很多了,基于它再開發(fā)的庫就有十幾個。
plotly:是一個可交互,基于瀏覽器的繪圖庫,主打功能是繪制在線可交互的圖表。plotly繪制的圖能直接在jupyter中查看,也能保存為離線網(wǎng)頁,或者保存在plot.ly云端服務(wù)器內(nèi),以便在線查看。
cufflinks 庫就是基于plotly+pandas再開發(fā)的。
Bokeh:是一個專門針對Web瀏覽器呈現(xiàn)功能的交互式可視化Python庫。這是Bokeh與其它可視化庫最核心的區(qū)別。
- 專門針對Web瀏覽器的交互式、可視化Python繪圖庫
- 可以做出像D3.js簡潔漂亮的交互可視化效果,但是使用難度低于D3.js。
- 獨立的HTML文檔或服務(wù)端程序
- 可以處理大量、動態(tài)或數(shù)據(jù)流
- 支持Python (或Scala, R, Julia…)
- 基于Javascript,但不需要使用Javascript
Chartify可視化庫就是基于Bokeh創(chuàng)建。
High-Level Shared API,高級共享API
構(gòu)建在核心Python或JS庫之上,共享panda .plot() API的庫。
這一類有6個庫:
- pandas
- xarray
- cufflinks
- hvplot
- Pandas-Bokeh
- pdvega
它們的特點是共享panda.plot() API,提供了對pandas的DataFrame數(shù)據(jù)結(jié)構(gòu)的支持。
pandas:
通過導(dǎo)入matplotlib.pyplot,將pyplot的函數(shù)進(jìn)一步封裝為DataFrame的方法,實現(xiàn)了兩個目標(biāo):
- 簡便、快速的繪圖方式;
- 對DaraFrame的支持。
由此可見,你如果熟練掌握了matplotlib,掌握pandas中的繪圖不需要走過10分鐘的時間。
xarray:多維數(shù)組中的繪圖。在Pandas早期版本中有一個xarray數(shù)組,后來把這一部分完全交由xarray庫處理。多維(又名N維,ND)陣列(有時稱為“張量”)是計算科學(xué)的重要組成部分。它涉及廣泛的領(lǐng)域,包括物理學(xué),天文學(xué),地球科學(xué),生物信息學(xué),工程學(xué),金融學(xué)和深度學(xué)習(xí)。在Python中,NumPy提供了用于處理原始ND陣列的基本數(shù)據(jù)結(jié)構(gòu)和API。但是,真實世界的數(shù)據(jù)集通常不僅僅是原始數(shù)據(jù); 它們有標(biāo)簽,用于編碼有關(guān)數(shù)組值如何映射到空間,時間等位置的信息。
xarray繪圖功能是matplotlib庫的一個薄包裝器 。
cufflinks:基于plotly+pandas再開發(fā)的。當(dāng)然是要結(jié)合兩個的優(yōu)勢了。提供了對pandas數(shù)據(jù)的支持,和plotly的交互式功能。
Pandas-Bokeh:顧名思義,Pandas和Bokeh的結(jié)合。
hvplot:Python數(shù)據(jù)生態(tài)系統(tǒng)有許多核心Python數(shù)據(jù)容器,允許用戶使用各種數(shù)據(jù)類型,包括:
- Pandas:DataFrame,Series(柱狀/表格數(shù)據(jù))
- XArray:Dataset,DataArray(多維數(shù)組)
- Dask:DataFrame,Series,Array(分布式/核心數(shù)組和列數(shù)據(jù))
- Streamz:DataFrame(s),Series(s)(流式柱狀數(shù)據(jù))
- Intake:DataSource(數(shù)據(jù)目錄)
- GeoPandas:GeoDataFrame(幾何數(shù)據(jù))
- NetworkX:圖表(網(wǎng)絡(luò)圖)
其中一些庫具有高級繪圖API的概念,使用戶可以非常輕松地生成常見的繪圖類型。本機(jī)繪圖API通常基于Matplotlib構(gòu)建,它提供了堅實的基礎(chǔ),但現(xiàn)代交互式繪圖庫(如Bokeh和HoloViews)的功能較弱。
hvPlot提供了一個基于HoloViews的高級繪圖API,它提供了一個通用且一致的API,用于繪制所有上述格式的數(shù)據(jù)。
hvPlot是PyViz計劃的一部分,旨在使基于Python的可視化工具能夠很好地協(xié)同工作。
pdvega:使用與pandas內(nèi)置可視化工具幾乎相同的API 快速基于DataFrame數(shù)據(jù)創(chuàng)建交互式圖表,可以在Jupyter notebook中輕松使用。
High-Level,高級庫
InfoVis組的5個庫,專注于數(shù)據(jù)可視化的高級操作,構(gòu)建在核心Python或JS庫之上。
- seaborn,基于matplotlib,特長在繪制統(tǒng)計圖形。
- altair,基于Vega-Lite JSON規(guī)范構(gòu)建,特點在統(tǒng)計、簡潔、美觀。
- holoviews,基于Plotly, Matplotlib的OO接口,Bokeh的SVG導(dǎo)出,3D支持,提供了web繪圖和交互式繪圖功能;這是PyViz的發(fā)展方向--“融合”
- plotly_express,顧名思義,plotly的進(jìn)一步封裝,復(fù)雜圖表的簡單語法。
- chartify,從它官方宣稱的“可以讓數(shù)據(jù)科學(xué)家輕松創(chuàng)建圖表”,就兩個字進(jìn)一步的”封裝“。
Native-GUI,本機(jī)GUI
InfoVis組的5個庫,目標(biāo)是獲得用于交互式繪圖的本機(jī)桌面GUI界面。
- pyqtgraph
- glue:多個文件的交互式鏈接統(tǒng)計圖形,用于探索相關(guān)數(shù)據(jù)集內(nèi)部和之間的關(guān)系。
- chaco:交互式二維繪圖。
- veusz:一個2D和3D科學(xué)繪圖包,旨在簡單。
- gr:跨平臺可視化應(yīng)用程序的通用框架。它為開發(fā)人員提供了一個緊湊,可移植且一致的圖形庫。
該類最重要的是:PyQtGraph:
PyQtGraph旨在提供工程和科學(xué)應(yīng)用程序通常所需的圖形和用戶界面功能。其主要目標(biāo)是:
- 提供快速,交互式圖形以顯示數(shù)據(jù)(圖表,視頻等)
- 提供工具以幫助快速應(yīng)用程序開發(fā)(例如,Qt Designer中使用的屬性樹)。
PyQtGraph雖然是開源項目,但版權(quán)屬于北卡羅來納大學(xué)教堂山分校。
PyQtGraph通過PyQt或PySide大量使用Qt GUI平臺來獲得高性能圖形,使用numpy來支持大量高速運算。特別是使用Qt的GraphicsView框架提供了功能強(qiáng)大的圖形系統(tǒng)。
pyqtgraph的核心功能包括:
- 基本數(shù)據(jù)可視化基元:圖像,線和散點圖
- 足夠快,可以實時更新視頻/繪圖數(shù)據(jù)
- 交互式縮放/平移,平均,F(xiàn)FT,SVG / PNG導(dǎo)出
- 用于標(biāo)記/選擇繪圖區(qū)域的小部件
- 用于標(biāo)記/選擇圖像感興趣區(qū)域并自動切片多維圖像數(shù)據(jù)的小部件
- 用于構(gòu)建定制圖像感興趣區(qū)域小部件的框架
- 取代/補(bǔ)充Qt的對接系統(tǒng),以允許更復(fù)雜(和更可預(yù)測)的對接安排
- ParameterTree小部件,用于動態(tài)接口的快速原型設(shè)計(類似于Qt Designer和許多其他應(yīng)用程序中的屬性樹)

pyqtgraph-3d
Other InfoVis,其它信息可視化庫
InfoVis繪制不適合上述其他類別的庫。
- pygal,一個用python編寫的動態(tài)SVG(Scalable Vector Graphics)圖表庫。 SVG意為可縮放的矢量圖形,它是基于XML(Extensible Markup Language)。
- plotnine,是Python 中對ggplot2圖形語法的一種實現(xiàn),允許用戶通過將數(shù)據(jù)顯式映射到構(gòu)成繪圖的可視對象來組合繪圖。 是一位德國學(xué)者完成的,它幾乎是對R ggplot2繪圖包的移植。
- bqplot:使用pythonic API為二維可視化提供統(tǒng)一的框架,為添加用戶交互提供合理的API(平移,縮放,選擇等)
- toyplot:toy,玩具,這是Python版的一款適合兒童的繪圖工具包。
- biggles:一個Python模塊,用于創(chuàng)建出版品質(zhì)的2D科學(xué)圖,看不出有什么特點。
SciVis
用于可視化真實坐標(biāo)(地理空間、物理空間)中的科學(xué)數(shù)據(jù)的庫,通常使用OpenGL或WebGL。物理、環(huán)境科學(xué)人士關(guān)注的類,與我等草根的距離太遠(yuǎn)了。
- VTK:VTK 包括許多高級算法(例如,表面重建,隱式建模)和渲染技術(shù),被院士級人士用于教學(xué)和研究 。
- vispy:Python中的交互式科學(xué)可視化,特點:3D, 立體,交互,大量數(shù)據(jù)。
- pyvista
- mayavi
- ipyvolume
- glumpy
- itk-jupyter-widgets
Geospatial,地理空間
處理地理坐標(biāo)數(shù)據(jù)的工具。GIS緊密相關(guān)。
- geopandas:GeoPandas是一個向pandas對象添加地理數(shù)據(jù)支持的項目 。
- folium:folium基于Python生態(tài)系統(tǒng)的數(shù)據(jù)處理優(yōu)勢和leaf .js庫的映射優(yōu)勢。使用Python操作數(shù)據(jù),然后通過folium在單張地圖中可視化數(shù)據(jù)。
- cartopy:旨在使數(shù)據(jù)分析和可視化的繪制地圖變得容易。
- gmplot:Cartopy是一個Python包,旨在使數(shù)據(jù)分析和可視化的繪圖地圖變得容易。
- ipyleaflet:Jupyter / Leaflet 之間的橋梁,可在Jupyter筆記本中實現(xiàn)交互式地圖。
- geoviews:......
- geoplotlib:......
- geoplot:......
Other domain-specific,其它特定領(lǐng)域的包
專注于特定的研究或應(yīng)用領(lǐng)域繪圖、圖像處理工具包。
- networkx:繪制網(wǎng)絡(luò)圖。
- scikit-image:用于圖像處理
- missingno:提供了一個靈活且易于使用的缺失數(shù)據(jù)可視化和實用程序的小工具集,使您可以快速直觀地總結(jié)數(shù)據(jù)集的完整性(或缺少)。
- yellowbrick:可視化分析和診斷工具,方便機(jī)器學(xué)習(xí)模型選擇。
- yt:yt支持結(jié)構(gòu)化,可變分辨率網(wǎng)格,非結(jié)構(gòu)化網(wǎng)格以及離散或采樣數(shù)據(jù)(如粒子)。專注于推動物理上有意義的探究,已經(jīng)應(yīng)用于諸如天體物理學(xué),地震學(xué),核工程,分子動力學(xué)和海洋學(xué)等領(lǐng)域。
- hypertools:HyperTools旨在促進(jìn)降維 -基于高維數(shù)據(jù)的視覺探索?;韭窂绞禽斎敫呔S數(shù)據(jù)集(或一系列高維數(shù)據(jù)集),并在單個函數(shù)調(diào)用中,減少數(shù)據(jù)集的維度并創(chuàng)建繪圖。
- scikit-plot:機(jī)器學(xué)習(xí)領(lǐng)域。
- clustergrammer2:構(gòu)建交互式熱圖的Jupyter小部件。
- arviz:一個用于貝葉斯模型探索性分析的Python軟件包。包括后驗分析,模型檢查,比較和診斷功能。
根據(jù)你研究的領(lǐng)域去進(jìn)一步地了解吧!
Large-data rendering,大數(shù)據(jù)集渲染
用于在可視化之前對服務(wù)器端數(shù)據(jù)進(jìn)行柵格化/聚合的工具。
- datashader:Datashader是一個數(shù)據(jù)柵格化管道,用于創(chuàng)建大量數(shù)據(jù)的有意義表達(dá)。
- vaex :Vaex是一個用于可視化和探索大表格數(shù)據(jù)集。它可以 在N維網(wǎng)格上計算每秒超過十億個對象/行的統(tǒng)計數(shù)據(jù),例如平均值,總和,計數(shù),標(biāo)準(zhǔn)偏差等 。可視化使用直方圖,密度圖和3d體積渲染完成,允許交互式探索大數(shù)據(jù)。
Dashboarding,儀表板
用于創(chuàng)建動態(tài)的python支持的web應(yīng)用程序或儀表板的庫,用戶可以與這些庫交互來探索或分析數(shù)據(jù)。
- dash
- panel
- voila
Colormapping,顏色映射
用于生成新顏色映射的顏色映射和工具的集合。
- palettable
- colorcet
- cmocean
- viscm
Dormant projects
作者已不再開發(fā)和維護(hù)的工具。
- basemap
- d3po
- galry
- ggpy
- gleam
- leather
- lightning
- mpld3
- PyQwt
- vincent
- visvis
你不會去學(xué)習(xí)和使用它們吧。
未完待續(xù)
篇幅有點長了,如何選擇適合你的Python數(shù)據(jù)可視化工具,下篇接著聊。
關(guān)注”Python草堂“,輕松閱讀下一篇。