Python 可視化工具全景圖
R的可視化工具包ggplot2為R的流行起到了很好的推動作用。常有人拿這個與Python作比較,認為可視化是Python相對于R的短板。
其實我以為,恰恰是Python的可視化生態過于“豐富”,豐富到有點讓人無所適從:
這些庫各有長短、各有側重,常常不知如何選擇;
似乎又都有一些不如人意的地方,讓初學習者常換工具,浪費了太多的時間和精力。
所以,本篇將:
系統地分析一下Python可視化工具的生態;
對一些重要的工具進行一些簡單地介紹;
最后給出一些如何根據自己的情況選擇合適的一兩個Python可視化工具的建議。
根據PyViz的登記,目前共有 68 個Python可視化工具(庫、包)。其中有11個的作者已不再開發或認可。仍在開發維護的工具有57個之多。前面的圖展示了其中目前仍在維護的主要工具。
這么多可視化工具,初看起來確實令人生畏。
對這些工具進行一下歸類比較,有助于我們做出合適的選擇。
注意:這是一個草根為自己總結的!
計算機繪圖世界有兩個接近硬件級的底層庫,或者叫規范、標準:
OpenGL,通用的
Direct3,windows系統上的
一般的顯卡制造商基于它們編寫顯卡(圖形)驅動程序。
程序開發語言,在底層調用相對低級的圖形庫,提供一套高級一點的API供程序員使用。如,Python中的PyQtGraph,2D圖形使用Qt的GraphicsView框架,3D圖形使用OpenGL。
一般情況下,程序開發人員才會直接使用它們。
繪圖時直接使用的庫和包,如matplotlib,調用Python的PyQtGraph。但一般使用人員都是直接使用matplotlib提供的API接口(函數,對象等)。
需要繪圖、可視化的人員使用;做二次開發的人員使用。
在三級庫包的基礎上再開發、封裝,如基于matplotlib做二次開發、封裝的plotnine、seaborn等。實際上matplotlib的pyplot模塊也就是mpl核心對象的封裝函數集。
主要用于快速繪圖、可視化工作。
IEEE組織習慣于將Python可視化工具分為兩個組:
一是:Scientific Visualization (SciVis) ,科學可視化。主要基于OpenGL圖形標準,提供三維或四維物理過程的圖形密集可視化,側重于工程和科學環境。常見的這類Python可視化工具有VisPy, glumpy, GR, Mayavi等。
如使用 VisPy 庫繪制螺旋星系圖。
螺旋星系圖
二是:Information Visualization (InfoVis) ,信息可視化。專注于任意空間中信息的可視化,而不一定是三維物理世界。InfoVis組的庫使用打印頁面或計算機屏幕的兩個維度來抽象、解釋空間,通常使用軸和標簽。常見的Python這類庫有,pandas, NetworkX, Cartopy,ggplot, plotnine, HoloViews, GeoViews,seaborn等。
我等草根很少需要去使用SciVis組的可視化工具,99%都在InfoVis組選擇。
可以根據庫的基礎語言、等級、應用場景等,InfoVis組的庫可以進一步細分為若干個子組:
Matplotlib:最古老,也是最受歡迎的InfoVis庫之一,具有廣泛的2D繪圖類型和輸出格式。使用桌面GUI工具包(如Qt和GTK)庫,重點放在靜態圖像以及交互式圖形上。也對3D提供了一定的支持,但有一些限制。
基于matplotlib:多年來,基于Matplotlib二次開發,構建了各種工具。目的有:用于特定類型數據的渲染引擎,用于特定領域(如Pandas中的繪圖對DataFrame的支持),或提供更高級別的API以簡化繪圖步驟(如ggplot, plotnine),或者特定用途(如seaborn的統計繪圖)等。
JavaScript,及基于JavaScript的庫。
JSON,基于JavaScript的D3.js庫。
WebGL,基于WebGL標準的Web繪圖。
其他,提供一些特殊的、補充功能的庫,如用于可視化網絡的graphviz。
根據庫在Python可視化生態中所處的位置、領域、狀態,可以將68個Python可視化工具分為以下12類:
其中休眠狀態的庫有11個,原則上不應選擇這些庫。
為了有一個合適的篇幅,將在下篇中接著討論:
Python重要庫的介紹;
如何選擇適合你的Python可視化工具;
我為什么選擇Matplotlib。