前言
- 本文將介紹如何使用Plotly+Cufflinks更簡(jiǎn)便地制作出更好的圖表。
- 這是Github上一個(gè)大神發(fā)布的資料,本人學(xué)習(xí)之后覺得非常實(shí)用,所以和大家分享。需要查看代碼的童鞋指路Github:https://github.com/WillKoehrsen/Data-Analysis
- 本文中的所有代碼都是使用Jupyter notebook完成的,在使用pip命令安裝了plotly和cufflinks之后,可以import使用它們。
1、Plotly+Cufflinks是什么?
- Plotly Python包是Plotly公司開發(fā)的可視化軟件的開源版本,是基于plotly.js構(gòu)建的,而后者又建立在d3.js上。
- 因?yàn)镻lotly不能直接接受numpy和pandas的數(shù)據(jù)結(jié)構(gòu),所以用一個(gè)名為cufflinks的封裝器來(lái)使用Pandas數(shù)據(jù)可以減少數(shù)據(jù)處理工作。
- 這兩個(gè)庫(kù)的組合使用起來(lái)很簡(jiǎn)單,大部分時(shí)候可以用一行代碼生成非常棒的圖表,會(huì)比Matplotlib簡(jiǎn)單多了。
- 導(dǎo)入庫(kù):
- import plotly.graph_objs as go
- import cufflinks as cf
- from plotly.offline import iplot,init_notebook_mode
- init_notebook_mode(connected=True)
- cf.go_offline(connected=True)
2、花樣制作各式圖表
直方圖、箱線圖、柱狀圖、散點(diǎn)圖、折線圖、餅圖、散點(diǎn)矩陣、熱力圖、散點(diǎn)3D圖、氣泡3D圖,全部都可以用簡(jiǎn)單的一行代碼搞定!
2.1、直方圖
-
直方圖是繪制單一變量的首選圖,下圖是作者WillKoehrsen繪制的變量['Claps']直方分布圖:
1.png
1.gif 代碼非常簡(jiǎn)單,就是在data之后加一個(gè)iplot后綴,并添加相應(yīng)的參數(shù)。圖表是交互式的,把鼠標(biāo)放在bins可以獲得相應(yīng)數(shù)據(jù)。
2.1.1、分組直方圖
-
繪制分組直方圖只需要添加參數(shù)[barmode='group']即可,非常簡(jiǎn)便。
2.png
2.gif
2.1.2、疊加直方圖
-
繪制疊加直方圖則添加參數(shù)[barmode='overlay']。
3.png
2.1.3、小結(jié)
- 代碼:df['value'].iplot(kind='hist',bins= ,xTitle= ,yTitle= ,title= )
- 其他參數(shù):linecolor、opacity(透明度)、bargap(間隔)、histnorm、barmode
2.2、柱狀圖
-
對(duì)于條形圖,需要先應(yīng)用聚合函數(shù),將x軸變量設(shè)為索引,然后再使用iplot繪圖。例如作者以['publication']進(jìn)行分組并計(jì)算變量['fans']的數(shù)量,再進(jìn)行圖形展示:
4.png -
如果繪制多個(gè)分類的柱狀圖,則相應(yīng)添加多個(gè)y軸變量即可,非常簡(jiǎn)單!
5.png
2.2.1、雙坐標(biāo)軸
- 如果兩個(gè)分組變量的范圍相差太大,我們又想把它們放在同一個(gè)坐標(biāo)軸上,則可以設(shè)立y2軸。
-
設(shè)立y2軸只需要添加參數(shù)secondary_y。
6.png
2.2.2、小結(jié)
- 代碼:df.iplot(kind='bar',xTitle= ,yTitle= ,title= )
- 其他參數(shù):secondary_y、secondary_y_title
2.3、箱線圖
-
箱線圖的制作和直方圖類似,不過(guò)要把kind參數(shù)換成[kind='box']。
7.png
4.gif
2.3.1、分類箱線圖
-
如果我們需要制作分類箱線圖,則需要先制作一個(gè)透視表。
8.png
2.3.2、小結(jié)
- 代碼:df.ilpot(kind='box',xTitle= ,yTitle= ,title= )、df.pivot(columns= ,values= )
- 其他參數(shù):colorscale、layout
2.4、散點(diǎn)圖和折線圖
- 制作散點(diǎn)圖和折線圖的話,和前面3個(gè)圖不同,需要將kind參數(shù)更改為mode參數(shù),不然會(huì)報(bào)錯(cuò)。
-
x軸變量默認(rèn)為索引,但可以通過(guò)參數(shù)[x=' ']進(jìn)行更改。
9.png
2.4.1、增加擬合線
-
增加擬合線相關(guān)參數(shù):bestfit=True
5.gif
2.4.2、增加文字注釋
- 利用text參數(shù)增加文字注釋。
-
作者利用HTML寫了一個(gè)例子:
10.png
2.4.3、分類散點(diǎn)圖
- 制作分類散點(diǎn)圖可以通過(guò)categories參數(shù)添加:
-
此外,也可以通過(guò)size參數(shù)對(duì)散點(diǎn)做進(jìn)一步的區(qū)分,但size參數(shù)所帶變量必須是數(shù)值變量。
11.png
2.4.4、添加參考區(qū)域或參考線
-
使用hline和vline參數(shù)可以添加線,使用vspan和hspan參數(shù)可以添加區(qū)域,和Matplotlib語(yǔ)法是類似的~
12.png
2.4.5、小結(jié)
- 相關(guān)參數(shù):bestfit、text、categories、symbol(散點(diǎn)形狀設(shè)置)、size(散點(diǎn)大小)、xrange(x軸范圍)、yrange(y軸范圍)、hline(水平參考線)、vline(垂直參考線)、hspan(水平參考區(qū)域)、vspan(垂直參考區(qū)域)
2.5、散點(diǎn)矩陣和熱力圖
- 導(dǎo)入畫圖庫(kù):import plotly.figure_factory as ff
-
散點(diǎn)矩陣畫圖函數(shù):ff.create_scatterplotmatrix();熱力圖畫圖函數(shù):ff.create_annotated_heatmap()
13.png
2.6、餅圖
-
要制作餅圖,需要先用聚合函數(shù)對(duì)變量進(jìn)行分類,但不能設(shè)置分類變量為索引,否則無(wú)法畫圖。
14.png
2.7、3D圖形
-
除了以上圖形,plotly也可以畫好看的3D圖形,比如曲面圖、3D散點(diǎn)圖等。
dai
3、總結(jié)
- 比起Matplotlib和seaborn,Plotly可以快速地實(shí)現(xiàn)交互可視化,并輸出令人愉悅的圖形,讓我們能更深入地探索數(shù)據(jù)細(xì)節(jié)。


















