Python有很多可視化工具,大體上可以分為基于matplotlib的工具庫和基于JS的工具庫。
有如此豐富的選擇是幸福的,無論你要畫什么圖,都能找到相對的庫。但與此同時,弄清楚使用哪個工具更合適可能非常具有挑戰性。本文對常用的一些可視化工具進行介紹,并說明它們之間的主要區別。
基于matplotlib的可視化工具
在介紹基于matplotlib的工具之前, 首先介紹一些matplotlib庫。正如《Overview of Python Visualization Tools》中所介紹的——“Matplotlib is the grandfather of python visualization packages”——matplotlib是第一個python可視化庫,也是使用最廣泛的可視化工具之一。它參考MATLAB對低級命令進行了封裝,有著非常強大的功能,能繪制絕大多數常用的圖,同時支持非常豐富的配置。(參見官網的matplotlib圖例)
但隨之而來的是復雜性,往往需要相對較多的代碼才能得到想要的效果。加之其默認的繪圖風格過于簡約復古,想要對其美化更是要花些功夫。
- Seaborn
Seaborn是基于matplotlib的可視化庫。它提供了一些更美觀的配置選項,同時可以用更簡單的代碼來創建復雜的圖。Seaborn封裝了很多統計繪圖函數,使得在做數據分析時非常方便。
seaborn圖例 - Pandas
Pandas基于matplotlib也提供較為簡單的API繪制圖形,如pandas.tools.plotting。其使用pandas DataFrame進行繪圖,這使得可以使用Pandas從分析到繪圖無縫銜接。不過想要對圖進行進一步的調整,就需要跳入matplotlib進行設置,而無法完全通過pandas進行操作。 - ggplot
與seaborn類似,ggplot也基于matplotlilb,旨在以一種簡單的方式改善matplotlib可視化的美化問題。與seaborn的不同之處在于它是 ggplot2為R語言準備的一個端口,所以它的一些api不是基于python而是基于R語言的。ggoplot利用了圖形語法的概念,是一種不同的繪圖邏輯。
在進行可視化時通常涉及到地理信息的處理。除了常規的折線,柱狀圖之外,空間分布也是數據可視化中非常重要的一項。Python中一些庫則專門處理涉及地理信息圖形的工作,比如Basemap,Cartopy等。此外,geopandas擴展了pandas的繪圖模塊以支持地圖和幾何操作,并且相比Basemap和Cartopy處理效率相對更高,處理步驟更簡單一些。
基于JS的可視化工具
基于matplotlib的可視化工具存在一個很明顯的缺點,是其繪圖處理速度低,尤其是在實時交互和圖形快速更新等方面
對于圖基于JS開發的可視化庫相對于matpltolib來說,交互可視化正是它的優勢。
- Bokeh和HoloViews
Bokeh和HoloViews是開源的交互式可視化庫。它們都是屬于PyViz生態(可參見PyViz生態)。
HoloViews用于即時可視化數據的聲明對象,從方便的高級規范構建Bokeh圖
Bokeh致力于在現代Web瀏覽器中生成可視化效果。它旨在進行交互式Web可視化。 - plotly
plotly區別于其他工具,是企業級分析和可視化的在線工具。其基于開源的可視化框架Dash,并提供了很多語言(比如MATLAB,Python,R等)的接口,并與pandas無縫集成。 - Cufflinks
Cufflinks將Plotly直接綁定到pandas數據幀。結合了Pandas的靈活性,比Plotly更有效,語法甚至比plotly簡單。使用plotly的Python庫,您可以使用DataFrame的系列和索引來描述圖形,但是使用Cufflinks可以直接繪制它。 - GeoViews
GeoViews同樣是PyViz的產品,專門用于可視化的地理數據,可以與HoloViews對象混合和匹配。
GeoViews樣例 - Folium
Folium是另一個用于繪制空間數據的“神庫”,建立在Python生態系統的數據優勢和Leaflet.js庫的映射優勢之上。你可以在python中操作數據,然后通過folium在Leaflet地圖中將其可視化。 - Altair
Altair類似Seaborn用于統計可視化。是一種聲明性統計可視化庫,是JavaScript的高級可視化庫Vega-Lite的包裝器。Altair的API也是基于圖形語法的,數據圍繞Pandas Dataframe構建。
總結
根據具體的需要選擇更合適的工具,對常見的一些工具庫,可以作如下總結。
- 對于沒有交互需求的圖,可以使用基于matplotlib的工具
對于簡單的圖表繪制任務,直接使用Pandas是非常方便的。但在對圖進行定制化操作是需要使用matplotlib來實現。
對于較為復雜的可視化修以及統計分析需求,Seaborn 有更簡便的實現,同時有很好的美化功能。但仍需要 matplotlib 的知識來調整。ggplot也是不錯的選擇。
對地理空間的可視化需求,則考慮Basemap/Cartopy/geopandas。 - 對于交互可視化,則基于JS的工具有很好的性能
如果需要建立可視化服務器,bokeh 將是一個強大的工具。并用GeoViews來解決地理可視化的需求。
Plotly可以創建最具互動性的圖表。可以離線保存,并創建非常豐富的基于web的可視化圖表。
對有分析需求的任務可以考慮使用Altair。
參考:
Overview of Python Visualization Tools
Python可視化工具概覽
seaborn官網
matplotlib官網
plotly官網