Python有很多可視化工具漓摩,大體上可以分為基于matplotlib的工具庫和基于JS的工具庫裙士。
有如此豐富的選擇是幸福的,無論你要畫什么圖管毙,都能找到相對的庫腿椎。但與此同時,弄清楚使用哪個工具更合適可能非常具有挑戰(zhàn)性夭咬。本文對常用的一些可視化工具進行介紹啃炸,并說明它們之間的主要區(qū)別。
基于matplotlib的可視化工具
在介紹基于matplotlib的工具之前卓舵, 首先介紹一些matplotlib庫南用。正如《Overview of Python Visualization Tools》中所介紹的——“Matplotlib is the grandfather of python visualization packages”——matplotlib是第一個python可視化庫,也是使用最廣泛的可視化工具之一掏湾。它參考MATLAB對低級命令進行了封裝裹虫,有著非常強大的功能,能繪制絕大多數(shù)常用的圖融击,同時支持非常豐富的配置筑公。(參見官網(wǎng)的matplotlib圖例)
但隨之而來的是復(fù)雜性,往往需要相對較多的代碼才能得到想要的效果尊浪。加之其默認的繪圖風格過于簡約復(fù)古匣屡,想要對其美化更是要花些功夫。
- Seaborn
Seaborn是基于matplotlib的可視化庫拇涤。它提供了一些更美觀的配置選項捣作,同時可以用更簡單的代碼來創(chuàng)建復(fù)雜的圖。Seaborn封裝了很多統(tǒng)計繪圖函數(shù)鹅士,使得在做數(shù)據(jù)分析時非常方便券躁。
- Pandas
Pandas基于matplotlib也提供較為簡單的API繪制圖形,如pandas.tools.plotting。其使用pandas DataFrame進行繪圖嘱朽,這使得可以使用Pandas從分析到繪圖無縫銜接旭贬。不過想要對圖進行進一步的調(diào)整,就需要跳入matplotlib進行設(shè)置搪泳,而無法完全通過pandas進行操作。 - ggplot
與seaborn類似扼脐,ggplot也基于matplotlilb岸军,旨在以一種簡單的方式改善matplotlib可視化的美化問題。與seaborn的不同之處在于它是 ggplot2為R語言準備的一個端口瓦侮,所以它的一些api不是基于python而是基于R語言的艰赞。ggoplot利用了圖形語法的概念,是一種不同的繪圖邏輯肚吏。
在進行可視化時通常涉及到地理信息的處理方妖。除了常規(guī)的折線,柱狀圖之外罚攀,空間分布也是數(shù)據(jù)可視化中非常重要的一項党觅。Python中一些庫則專門處理涉及地理信息圖形的工作,比如Basemap斋泄,Cartopy等杯瞻。此外,geopandas擴展了pandas的繪圖模塊以支持地圖和幾何操作炫掐,并且相比Basemap和Cartopy處理效率相對更高魁莉,處理步驟更簡單一些。
基于JS的可視化工具
基于matplotlib的可視化工具存在一個很明顯的缺點募胃,是其繪圖處理速度低旗唁,尤其是在實時交互和圖形快速更新等方面
對于圖基于JS開發(fā)的可視化庫相對于matpltolib來說,交互可視化正是它的優(yōu)勢痹束。
- Bokeh和HoloViews
Bokeh和HoloViews是開源的交互式可視化庫检疫。它們都是屬于PyViz生態(tài)(可參見PyViz生態(tài))。
HoloViews用于即時可視化數(shù)據(jù)的聲明對象参袱,從方便的高級規(guī)范構(gòu)建Bokeh圖
Bokeh致力于在現(xiàn)代Web瀏覽器中生成可視化效果电谣。它旨在進行交互式Web可視化。 - plotly
plotly區(qū)別于其他工具抹蚀,是企業(yè)級分析和可視化的在線工具剿牺。其基于開源的可視化框架Dash,并提供了很多語言(比如MATLAB环壤,Python晒来,R等)的接口,并與pandas無縫集成郑现。 - Cufflinks
Cufflinks將Plotly直接綁定到pandas數(shù)據(jù)幀湃崩。結(jié)合了Pandas的靈活性荧降,比Plotly更有效,語法甚至比plotly簡單攒读。使用plotly的Python庫朵诫,您可以使用DataFrame的系列和索引來描述圖形,但是使用Cufflinks可以直接繪制它薄扁。 - GeoViews
GeoViews同樣是PyViz的產(chǎn)品剪返,專門用于可視化的地理數(shù)據(jù),可以與HoloViews對象混合和匹配邓梅。
- Folium
Folium是另一個用于繪制空間數(shù)據(jù)的“神庫”脱盲,建立在Python生態(tài)系統(tǒng)的數(shù)據(jù)優(yōu)勢和Leaflet.js庫的映射優(yōu)勢之上。你可以在python中操作數(shù)據(jù)日缨,然后通過folium在Leaflet地圖中將其可視化钱反。 - Altair
Altair類似Seaborn用于統(tǒng)計可視化。是一種聲明性統(tǒng)計可視化庫匣距,是JavaScript的高級可視化庫Vega-Lite的包裝器面哥。Altair的API也是基于圖形語法的,數(shù)據(jù)圍繞Pandas Dataframe構(gòu)建墨礁。
總結(jié)
根據(jù)具體的需要選擇更合適的工具幢竹,對常見的一些工具庫,可以作如下總結(jié)恩静。
- 對于沒有交互需求的圖焕毫,可以使用基于matplotlib的工具
對于簡單的圖表繪制任務(wù),直接使用Pandas是非常方便的驶乾。但在對圖進行定制化操作是需要使用matplotlib來實現(xiàn)邑飒。
對于較為復(fù)雜的可視化修以及統(tǒng)計分析需求,Seaborn 有更簡便的實現(xiàn)级乐,同時有很好的美化功能疙咸。但仍需要 matplotlib 的知識來調(diào)整。ggplot也是不錯的選擇风科。
對地理空間的可視化需求撒轮,則考慮Basemap/Cartopy/geopandas。 - 對于交互可視化贼穆,則基于JS的工具有很好的性能
如果需要建立可視化服務(wù)器题山,bokeh 將是一個強大的工具。并用GeoViews來解決地理可視化的需求故痊。
Plotly可以創(chuàng)建最具互動性的圖表顶瞳。可以離線保存,并創(chuàng)建非常豐富的基于web的可視化圖表慨菱。
對有分析需求的任務(wù)可以考慮使用Altair焰络。
參考:
Overview of Python Visualization Tools
Python可視化工具概覽
seaborn官網(wǎng)
matplotlib官網(wǎng)
plotly官網(wǎng)