數(shù)據(jù)科學(xué)系列:plotly可視化入門介紹
導(dǎo)讀
在入道數(shù)據(jù)崗位之初,曾系列寫過多個(gè)數(shù)據(jù)科學(xué)工具包的入門教程,包括Numpy、Pandas、Matplotlib、Seaborn、Sklearn等,這些也構(gòu)成了自己當(dāng)初的核心工具棧。在這5個(gè)工具包中,用于數(shù)據(jù)繪圖的有2.5個(gè)(Pandas可以算0.5個(gè)),占比之高定與當(dāng)時(shí)一度"沉迷"于簡(jiǎn)單而有效的可視化有關(guān),可謂樂此不疲。時(shí)隔一年有余,在不斷接觸了Plotly這個(gè)可視化新貴之后,近期終于正式學(xué)習(xí)了一下這個(gè)包的使用、特性及優(yōu)劣,并稍作整理、以資后鑒,遂成此文!

plotly繪圖簡(jiǎn)潔高效可交互,值得一試!

plotly支持多語言平臺(tái)
所以但是,為啥plotly不效仿Python中眾多第三方庫(kù)的做法,直接命名為pyplotly呢?畢竟這樣的先例不在少數(shù),例如pyecharts,pymysql,pytorch等。
進(jìn)一步地,為什么在掌握了matplotlib和seaborn這兩個(gè)近乎可以完成所有繪圖需求之后,還要另外花費(fèi)學(xué)習(xí)成本來上手plotly呢?或者說,plotly有哪些核心優(yōu)勢(shì)或者不可替代的地方?簡(jiǎn)言之:可交互性!是的,plotly的繪圖是支持交互的,而這是matplotlib和seaborn所不具備的(更嚴(yán)謹(jǐn)?shù)卣f,只是默認(rèn)情況下不可交互)。
plotly作為一個(gè)可視化庫(kù),當(dāng)然是能用來畫圖了,而且是多種豐富樣式的圖。所幸,這里不妨直接引用plotly官網(wǎng)的介紹:
The?plotly?Python?library?is?an?interactive, open-source plotting library that supports over 40 unique chart types covering a wide range of statistical, financial, geographic, scientific, and 3-dimensional use-cases.
幾個(gè)關(guān)鍵字是:開源、可交互、支持40余種圖表類型,涵蓋統(tǒng)計(jì)、金融、地理、科學(xué)和3D圖表。

統(tǒng)計(jì)和科學(xué)圖表系列

金融和地理圖表系列

AI科學(xué)系列
更多的圖表類型可以查看官網(wǎng),簡(jiǎn)而言之,plotly功能還是齊全且強(qiáng)大的。
既然本文定位為入門介紹系列,那么肯定是要介紹一下如何使用和上手的。
首先,python中安裝plotly庫(kù)的流程非常簡(jiǎn)單,且依賴很少(通過pip show plotly發(fā)現(xiàn),其只有2個(gè)依賴包),無論是pip還是conda都可通過常規(guī)的install方式快速完成安裝。

除上述subfolder,plotly另有若干獨(dú)立.py文件
具體而言,應(yīng)用plotly進(jìn)行可視化時(shí)一般會(huì)涉及以下子模塊:
express: plotly中用于可視化的高級(jí)API
graph_objects: 底層繪圖接口,包含了所有圖表對(duì)象和布局(graph_objs與其是同名包)
io: 底層接口,用于展示和讀寫圖表
colors: 用于配置圖表顏色相關(guān)
data: 提供了一些內(nèi)置的數(shù)據(jù)集加載功能,例如iris、tips數(shù)據(jù)集
plotly.graph_objects是底層API,是一種面向?qū)ο蟮睦L圖風(fēng)格,定義了plotly中的所有圖表對(duì)象(graph_objects翻譯過來,不就是圖表對(duì)象的意思嗎,真·簡(jiǎn)單粗暴!),并提供了相近的布局設(shè)置功能(layout),類似于matplotlib的角色; plotly.express是高層API,是一種函數(shù)式的繪圖風(fēng)格,繪圖的過程就是指定函數(shù)各個(gè)參數(shù)的過程,提供了更為簡(jiǎn)潔和方便的繪圖功能。如果說前者類似于matplotlib,那么plotly.express就妥妥的相當(dāng)于seaborn的角色!
好家伙,plotly自己還要定義兩套繪圖風(fēng)格,真的是要替代matplotlib+seaborn的江湖地位嗎?但對(duì)于使用者來說,或許是喜聞樂見的——需要快速簡(jiǎn)潔,就用plotly.express;需要個(gè)性化定制,則用plotly.graph_objects。
1)使用底層API——graph_objects
graph_objects之所以叫底層API,是因?yàn)楸┞读烁嗟睦L圖細(xì)節(jié)和參數(shù),但這利弊各半。一般來說,基于graph_objects子模塊繪圖主要分三步:
選定一個(gè)圖表對(duì)象(graph_object),并配置要繪圖的數(shù)據(jù),例如x和y數(shù)據(jù);圖表的屬性,例如標(biāo)題、線型等
設(shè)定一些布局(layout),并配置布局參數(shù),例如圖片尺寸、標(biāo)題等
創(chuàng)建一個(gè)Figure對(duì)象,并接收前兩步得到的圖表對(duì)象和布局對(duì)象,而后show出來
import?plotly.graph_objects?as?go??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:go
import?plotly.express?as?px??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:px
tips?=?px.data.tips()??# plotly內(nèi)置數(shù)據(jù)集:tips
#?使用graph_objects繪圖流程需要三步
line?=?go.Scatter(x=tips['total_bill'],?y=tips['tip'],?mode='markers')??#?①?創(chuàng)建圖表對(duì)象
layout?=?go.Layout(autosize=False,?width=900,?height=600, title='tips')??#?②?創(chuàng)建布局對(duì)象
go.Figure(data=line?,layout=layout).show()??#?創(chuàng)建Figure,接收?qǐng)D表和布局,并加以顯示
2)使用高級(jí)API——express
import?plotly.graph_objects?as?go??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:go
import?plotly.express?as?px??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:px
tips?=?px.data.tips()??# plotly內(nèi)置數(shù)據(jù)集:tips
#?使用express繪圖只需要調(diào)用一個(gè)函數(shù)
px.scatter(tips,?x='total_bill',?y='tip',?width=900,?height=600,?title='tips').show()


是不是有seaborn那個(gè)味道了。。?
另外值得補(bǔ)充的兩點(diǎn):
1)plotly提供了將一個(gè)matplotlib繪圖轉(zhuǎn)化為plotly繪圖的接口,一定程度上使得混合使用兩個(gè)可視化庫(kù)更為順滑,但具體使用體驗(yàn)有待嘗試;


相關(guān)閱讀:
