Python數(shù)據(jù)分析(基于Plotly的動態(tài)可視化繪圖)_第1頁
Python數(shù)據(jù)分析(基于Plotly的動態(tài)可視化繪圖)_第2頁
Python數(shù)據(jù)分析(基于Plotly的動態(tài)可視化繪圖)_第3頁
Python數(shù)據(jù)分析(基于Plotly的動態(tài)可視化繪圖)_第4頁
Python數(shù)據(jù)分析(基于Plotly的動態(tài)可視化繪圖)_第5頁
已閱讀5頁,還剩571頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Python數(shù)據(jù)分析基于Plotly的動態(tài)可視化繪圖目錄第1章快速開始1.1Plotly簡介1.2安裝與安裝環(huán)境1.3在線初始化1.4在線繪圖隱私說明1.5開始在線繪圖1.6使用離線繪圖庫1.7參數(shù)解讀1.8查看幫助第2章Plotly基礎(chǔ)圖形2.1基礎(chǔ)案例解讀2.2基本繪圖流程2.3散點圖2.3.1基本案例2.3.2樣式設(shè)置2.3.3應(yīng)用案例2.3.4參數(shù)解讀2.4氣泡圖2.4.1基本案例2.4.2樣式設(shè)置2.4.3縮放設(shè)置2.4.4參數(shù)解讀2.5線形圖2.5.1基本案例2.5.2數(shù)據(jù)缺口與連接2.5.3數(shù)據(jù)插值2.5.4填充線形圖2.5.5應(yīng)用案例2.5.6參數(shù)解讀2.6柱狀圖2.6.1基本柱狀圖2.6.2柱狀簇2.6.3層疊柱狀圖2.6.4瀑布式柱狀圖2.6.5圖形樣式設(shè)置2.6.6應(yīng)用案例2.6.7參數(shù)解讀2.7水平條形圖2.7.1基本案例2.7.2應(yīng)用案例2.7.3參數(shù)解讀2.8甘特圖2.8.1基本甘特圖2.8.2甘特圖(按數(shù)字索引)2.8.3甘特圖(按類別索引)2.8.4應(yīng)用案例2.9面積圖2.9.1基本面積圖2.9.2內(nèi)部填充面積圖2.9.3堆積面積圖2.10直方圖2.10.1基本直方圖2.10.2重疊直方圖2.10.3層疊直方圖2.10.4累積直方圖2.10.5應(yīng)用案例2.10.6參數(shù)解讀2.11餅圖2.11.1基本餅圖2.11.2環(huán)形餅圖2.11.3樣式設(shè)置2.11.4應(yīng)用案例2.11.5參數(shù)解讀2.12更多案例2.13Plotly對象概覽第3章Plotly高級圖形3.1時間序列3.1.1使用方法3.1.2時間范圍約束3.2滑動選擇控件3.3表格3.3.1入門案例3.3.2添加鏈接3.3.3使用Pandas3.3.4改變大小與顏色3.3.5表格與圖3.4多圖表3.5多個坐標(biāo)軸3.5.1雙坐標(biāo)軸3.5.2多坐標(biāo)軸3.5.3共享坐標(biāo)軸3.6多子圖3.6.1雙子圖(方法一)3.6.2雙子圖(方法二)3.6.3多子圖(方法一)3.6.4多子圖(方法二)3.6.5分割視圖區(qū)間3.6.6子圖共享坐標(biāo)軸(方法一)3.6.7子圖共享坐標(biāo)軸(方法二)3.6.8子圖坐標(biāo)軸自定義3.6.9嵌入式子圖3.6.10混合圖3.7繪制SVG3.7.1線形圖的繪制3.7.2線形圖應(yīng)用:創(chuàng)建圖形的切線3.7.3矩形圖的繪制3.7.4矩形圖應(yīng)用:設(shè)置時間序列區(qū)域高亮顯示3.7.5圓形圖的繪制3.7.6圓形圖應(yīng)用:高亮顯示散點圖的聚集簇第4章Plotly與Pandas4.1簡單快速入門4.1.1基本線形圖4.1.2基本散點圖4.1.3基本柱狀圖4.2使用cufflinks繪圖4.2.1安裝cufflinks4.2.2快速入門4.2.3快速獲取數(shù)據(jù)4.2.4自定義繪圖4.2.5常見經(jīng)典圖形4.2.6更多案例第5章金融繪圖5.1快速繪制K線圖5.1.1檢查Plotly版本5.1.2快速繪制OHLC(美國線)圖5.1.3快速繪制蠟燭圖5.2K線圖的優(yōu)化5.2.1過濾非交易時間5.2.2設(shè)置形狀、顏色和注釋5.2.3添加技術(shù)指標(biāo)5.3使用自定義數(shù)據(jù)的金融繪圖5.4高級金融繪圖5.4.1入門案例5.4.2綜合案例第6章Matplotlib6.1Matplotlib簡介6.2安裝Matplotlib6.3調(diào)整Matplotlib參數(shù)6.4常用的API功能6.5線性函數(shù)6.6增加子圖6.7確定坐標(biāo)范圍6.8概率圖6.9散點圖6.10柱狀圖6.11更多擴展第7章Plotly與網(wǎng)頁開發(fā)7.1Plotly在Django中的應(yīng)用7.1.1安裝環(huán)境搭建7.1.2安裝環(huán)境測試7.1.3入門案例一7.1.4入門案例二7.1.5更多案例擴展7.1.6應(yīng)用案例一7.1.7應(yīng)用案例二7.2Plotly在Flask中的應(yīng)用7.2.1安裝Flask7.2.2最小的Web應(yīng)用7.2.3模板渲染7.2.4入門案例一7.2.5入門案例二7.2.6應(yīng)用案例第8章Plotly與GUI開發(fā)8.1PyQt的安裝8.2案例解讀8.3設(shè)置提升的窗口部件8.4Plotly_PyQt5的使用8.5更多擴展(Plotly)8.6Plotly與PyQt5.6的結(jié)合8.7更多擴展(Matplotlib)8.8應(yīng)用案例:展示產(chǎn)品組合信息第9章Plotly與機器學(xué)習(xí)9.1Plotly在Sklearn中的應(yīng)用9.1.1分類問題9.1.2回歸問題9.1.3聚類問題9.2PyTorch可視化工具9.2.1Visdom簡介9.2.2安裝Visdom9.2.3Visdom與Plotly9.2.4Visdom基本概念9.2.5Visdom經(jīng)典案例9.2.6Visdom與PyTorch第10章Plotly在量化投資中的應(yīng)用第11章Plotly在其他語言中的應(yīng)用11.1Plotly在R語言中的應(yīng)用11.1.1安裝R語言11.1.2安裝Plotly模塊11.1.3Plotly應(yīng)用分析11.1.4更多擴展11.2Plotly在MATLAB中的應(yīng)用11.2.1下載與安裝11.2.2基礎(chǔ)入門11.2.3經(jīng)典案例11.2.4更多擴展11.3Plotly在JavaScript語言中的應(yīng)用11.3.1基礎(chǔ)入門11.3.2散點圖11.3.3條形圖11.3.4扇形圖11.3.5更多擴展1第1章快速開始1.1Pltly簡介Pandas(潘達思)數(shù)據(jù)分析軟件和Plotly互動式繪圖模塊可以稱為Python數(shù)據(jù)分析和Python量化分析兩大重量級模塊庫。事實上,這兩者的影響力早已超越Python語言領(lǐng)域。yPandas目已經(jīng)被業(yè)界公認(rèn)是大數(shù)據(jù)工程一線最好的解決方案。yPlotly被稱為史上最好的繪圖工具之一,是GitHub開源網(wǎng)站最“火”的兩大新項目之一(另外一個是Netflix的Spinnaker云計算項目。為了更好地展示金融數(shù)據(jù)的復(fù)雜性,下面首先介紹Plotly繪圖模塊。如圖1-1所示是Plotly網(wǎng)站截圖,網(wǎng)址是https://plot.ly。Python量化的關(guān)鍵是金融數(shù)據(jù)可視化無論是傳統(tǒng)的K線圖還是現(xiàn)在的互動策略分析都需要大量的可視化圖表具體到編程代碼就是各種Python繪圖模塊庫,傳統(tǒng)Python繪圖模塊庫有Matplotlib、Ggplot、Seaborn、Bokeh等。, 、 (Plotly繪圖底層使用的是plotl.jsplotl.js基于D3.jsstack.glebGL組件庫,由Plotly團隊的Mikolaysenko帶領(lǐng)開發(fā))和SVG,用JavaScript在網(wǎng)頁上實現(xiàn)類似MTLAB和PythonMatplotlib的圖形展示功能支持?jǐn)?shù)十種圖形包括2D和3D圖形,交互流暢,可以滿足一般科學(xué)計算的需要。該項目成功后,開始, 、 (Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖移植,目前已經(jīng)有Python、MTLAB、R語言、Jupyter等多種版本的API接口。圖1-1Plotly網(wǎng)站截圖gPlotly項目的創(chuàng)始人是AlexJohnson是哈佛大學(xué)物理博士曾經(jīng)做過燃料電池。該項目的參與者中有一位華裔女生叫BaobaoZhan(張寶寶是耶魯大學(xué)政治學(xué)博士。FernandoPerez(IPythonNotebook創(chuàng)始人)是該項目的顧問。gPlotly項目團隊在2013年就已經(jīng)拿到數(shù)百萬美元的投資,并在加拿大蒙特利爾注冊了公司公司名稱是科學(xué)數(shù)據(jù)云服務(wù)公司號稱“首個科學(xué)數(shù)據(jù)平臺提供線上和聯(lián)機服務(wù)方便用戶使用分享評論等功能其投資商有MHS資本西門子風(fēng)險資本、Rhoentures、Realentures和硅谷銀行等。Plotly公司有很多大牌客戶,如西門子、Google、美國國家航天局(NASA、美國空軍、華盛頓郵報、美國國家衛(wèi)生研究院等。Plotly公司的聯(lián)合創(chuàng)始人JackParmer這樣說過:對于開發(fā)者來說,繪制出漂亮的、交互式的圖表并將之分享是一件很容事的事,但是對于一般的用戶則很困難。Plotly改變了這種局面,借助互聯(lián)網(wǎng)的媒介、利用世界級的繪圖分析工具,每個人都可以參與其中。HackerNew(極客新聞網(wǎng)站曾經(jīng)專門討論過各種圖形模塊庫如Matplotlib、·2·第1章快速開始、 、 、 、 、、 、MPLD3BokehHighchartsFlotchartsMetricsGraphicsegaChartjsFusionCharts和JSXGraph。相比而言,Plotly功能齊全,、 、 、 、 、、 、2Plotly原本是收費的商業(yè)軟件幸運的是,016年6月Plotly繪圖模塊庫提供了免費的社區(qū)版本,并新增了Python等多種編程語言的接口,以及離線模式支持,這對于廣大中國用戶而言,獲得了現(xiàn)實的技術(shù)支持。2Python繪圖模塊庫數(shù)不勝數(shù),其中經(jīng)典的有數(shù)十個。目前,Plotly作為新一代互動型量化繪圖庫,基本上可以說一統(tǒng)天下。如圖1-2所示是Plotly繪圖模塊庫部分內(nèi)置的圖形類型。圖1-2Plotly繪圖模塊庫部分內(nèi)置的圖形類型·3·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖筆者在編寫本書時特別針對多種Python繪圖模塊庫進行了測試測試結(jié)果表明Plotly繪圖模塊庫的確是新一代Python繪圖模塊的王者之選也是各種eb平臺的優(yōu)先選擇繪圖模塊。P以筆者個人的測試感覺而言,lotly繪圖模塊庫既有Matplotlib繪圖模塊庫的強大與靈活,又有Seaborn統(tǒng)計繪圖模塊庫的現(xiàn)代配色組合與優(yōu)雅報表形態(tài)。PPlotly繪圖模塊庫可直接生成PNG等圖像文件與Bokeh繪圖模塊庫和各種基于eb的JavaScript圖表模塊庫類似,生成的是一個內(nèi)置JavaScript腳本的HTML網(wǎng)頁文件雖然文件比Bokeh繪圖模塊庫生成的文件略大但在互動性方面Plotly繪圖模塊庫強大得多。在3D圖表方面,雖然筆者沒有實際測試,但基于Plotly網(wǎng)站的案例可以看出,相對傳統(tǒng)Python3D圖表模塊庫,無論在圖表種類格式,還是色彩組合方面,Plotly繪圖模塊庫都顯得更加靈活和強大。圖1-3所示是Plotly繪圖模塊庫繪制的K線圖,支持互動功能,讀者可以參考o(jì)p極寬量化社區(qū)的演示網(wǎng)頁(/zwdemo.htm。圖1-3Plotly繪圖模塊庫繪制的K線圖請注意,案例中沒有使用任何圖片,是純JavaScript腳本函數(shù),所有的圖形、數(shù)據(jù)和互動都是通過JavaScript函數(shù)完成的這些JavaScript函數(shù)全部是通過Python自動生成的?!?·第1章快速開始圖1-3雖然是靜止的但在瀏覽器中其實是純JavaScript腳本的函數(shù)圖形支持各種互動功能,讀者可以好好體會一下,并且看看網(wǎng)頁源碼。Plotly原本是基于JavaScript的數(shù)據(jù)圖表分析繪制模塊庫在編程的靈活性和圖表的豐富性方面非常強大,優(yōu)點數(shù)不勝數(shù)。yPlotly本身是一款獨立的eb版數(shù)據(jù)可視化工具,界面友好,提供強大的互動性操作。y基于現(xiàn)代的配色組合和圖表形式相比MatplotibR語言圖表更加現(xiàn)代和絢麗。y具有簡單且強大的3D表繪制功能,支持多種格式。y對圖形參數(shù)的修改十分簡單、直觀,便于初學(xué)者使用。y有Python、、MTLAB、Jupyter、Excel等多種版本的接口。y與Pandas(潘達思)數(shù)據(jù)分析軟件無縫集成,并提供了專門的Plotly繪圖模塊庫,設(shè)計的圖表非常吸引人,而且具有高度互動性,這得益于其完善的文檔和簡單的PythonAPI,用戶入門也很容易,目前,Plotly繪圖模塊庫支持的圖表格式如下。y基本圖表:20種。y統(tǒng)計和海運方式圖:12種。y科學(xué)圖表:21種。y財務(wù)圖表:2種。y地圖:8種。y3D圖表:19種。y報告生成:4種。y連接數(shù)據(jù)庫:7種。y擬合工具:3種。y流動圖表:4種。隨著Plotly繪圖模塊庫軟件的升級與更新,未來會增加更多的圖表格式。Plotly底層使用的是plotl.js支持PythonRMTLABJavaScript這四種語言的擴展由于Python正處于數(shù)據(jù)分析領(lǐng)域的領(lǐng)先地位并且其重要性呈日漸上升之勢所以本書介紹Plotly時以Python語(Python3為主同時也會給出Plotly在其他語言中的一些應(yīng)用。Plotly發(fā)展很快,其應(yīng)用的領(lǐng)域也非常廣泛,不但應(yīng)用在傳統(tǒng)意義上的數(shù)據(jù)分·5·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖析與處理上,而且在網(wǎng)頁開發(fā)、程序GUI、機器學(xué)習(xí)等多個方面也有重要的應(yīng)用。由于這個原因本書涉及的內(nèi)容很廣除Plotly基礎(chǔ)知識外不會做太多深入的介紹,僅進行入門介紹,讀者可以結(jié)合基礎(chǔ)知識部分進行更深入的研究,這對于絕大部分讀者來說并不是什么難事。對于本書前半部分的基礎(chǔ)知識內(nèi)容并不需要讀者對Python有太多的了解沒有學(xué)過Python的讀者只需要花費兩個小時了解Python的基礎(chǔ)語法就可以了。本書后半部分的內(nèi)容,讀者可以按照自己的實際需求閱讀相關(guān)的章節(jié),然后稍微修改一下就可以進行實戰(zhàn),通過這種方式快速掌握這些技能。1.2安裝與安裝環(huán)境安裝Plotly的方法特別簡單,直接用pip命令安裝即可,代碼如下。pipinstallplotlyPlotly的Python包經(jīng)常被更新,若需要升級到最新版,運行如下代碼。pipinstallplotly--upgrade本書涉及的模塊都是一些比較流行的模塊,一般情況下都可以通過pip命令進行安裝。這里筆者建議使用Python3.5的anaconda或winpython開發(fā)環(huán)境,因為目前筆者使用Python3.6經(jīng)常遇到一些bug而使用Python3.5則沒有這些問題下載anaconda或winpython后,默認(rèn)環(huán)境就是本書所依賴的環(huán)境,如果有些模塊沒有找到,可以通過pip命令安裝。1.3在線初始化Plotly提供了一個在線托管繪圖結(jié)果的eb服務(wù)平臺,用戶可以在網(wǎng)站(https://plot.ly)免費創(chuàng)建一個賬號。用戶所繪制的圖表會保存在自己的在線Plotly賬戶中,并且可以控制相應(yīng)的權(quán)限。免費的托管方式是公共的,也就是自己的繪圖結(jié)果其他人也能夠看見網(wǎng)站也提供私有的托管方式不過是收費的這里不推薦,有興趣的讀者可以去官網(wǎng)查看。安裝好Python和Plotly后,要使用Plotly,首先要設(shè)置自己的憑據(jù),這個憑據(jù)·6·第1章快速開始在網(wǎng)站上注冊一個賬號就可以獲取。當(dāng)用戶注冊Plotly賬號并進行登錄后,在右上角可以找到自己的用戶選項,單擊其中的Settings選項,然后找到APIKey選項,如圖1-4所示。圖1-4獲取憑據(jù)圖1-4中的Username和APIKey是筆者為編寫本書注冊的一個測試賬號讀者可以通過注冊自己的賬號得到類似的結(jié)果。下面我們把上面的Username和APIKey記錄下來放入如下代碼中就完成了自己的憑據(jù)設(shè)置,由此,在線初始化完成。importplotlyplotly.tools.set_credentials_file(username='PlotlyBookTst',api_key='ECmqAy8kLE5Qk7h29trH')上面的初始化步驟會在當(dāng)前用戶目錄中存放一個特殊文件.plotly/.credentials這個文件內(nèi)容看起來是下面這樣的:{"proxy_username":"","proxy_password":"","api_key":"ECmqAy8kLE5Qk7h29trH","stream_ids":[],"username":"PlotlyBookTest"}·7·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖1.4在線繪圖隱私說明使用在線繪圖,有三種不同的隱私設(shè)置類型:公有、私有和秘密。y公有(1)任何人都可以查看用戶的圖表。(2)顯示在用戶的個人資料中,可以被搜索引擎搜索到。(3)用戶不需要登錄Plotly就可以查看這些圖表。y私有(1)只有自己才可以查看此圖表。(2)不會顯示在Plotly的信息源、用戶的個人資料和搜索引擎中。(3)用戶需要登錄才能查看這些圖表。y秘密(1)任何擁有此秘密鏈接的人都可以查看此圖表。(2)不會顯示在Plotly的信息源、用戶的個人資料和搜索引擎中。(3)如果它嵌入eb或JupyterNotebook中,任何查看該網(wǎng)頁的人都能夠看到此圖表。(4)用戶不需要登錄就可以查看這些圖表。在默認(rèn)情況下,所有圖表都被設(shè)置為公有模式。免費賬戶(公有模式的賬戶)可以有一個私有圖表。如果用戶有額外的私有存儲需求,就需要去官網(wǎng)升級產(chǎn)品服務(wù),感興趣的讀者可以去官網(wǎng)查看。1.5開始在線繪圖p在線繪圖時,繪圖和數(shù)據(jù)都保存在自己的云賬戶中。有兩個方法可以實現(xiàn)在線繪圖:.plot()和p.iplot()這兩個方法的作用都是在自己的賬戶中新建一個網(wǎng)址并存儲繪圖結(jié)果。當(dāng)然,這兩個方法也有不同的地方。py使用p.lot()方法進行繪圖會返回一個網(wǎng)址可以選擇是否打開這個網(wǎng)址默認(rèn)是打開的。y使用p.iplot(方法進行繪圖會返回PlotlyDisplay對象并以嵌的形式在JupyterNotebook中顯示出來?!?·第1章快速開始下面開始講解我們的第一個案(見文件Chapter01/first_start.py只需運行如下代碼。importplotly.plotlyaspyfromplotly.graph_objsimport*trace0=Scatter(x=[1,2,3,4],y=[10,15,13,17])trace1=Scatter(x=[1,2,3,4],y=[16,5,11,9])data=Data([trace0,trace1])py.plot(data,filename='first_start')運行上面的代碼會打開一個網(wǎng)頁,需要稍等片刻才能渲染完成,我們會看到如圖1-5所示的結(jié)果。圖1-5案例運行結(jié)果本書的第一個案例代碼運行完成。同樣,在JupyterNotebook(如果讀者不知道什么是JupyterNotebook,可以跳·9·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖過這部分)中,我們也可以在Spyder等IDE里面完成相同的繪圖操作,只需要把p.plot()改成p.iplot()就可以了(見文件Chapter01/first_start.ipynb,代碼如下。importplotly.plotlyaspyfromplotly.graph_objsimport*trace0=Scatter(x=[1,2,3,4],y=[10,15,13,17])trace1=Scatter(x=[1,2,3,4],y=[16,5,11,9])data=Data([trace0,trace1])py.iplot(data,filename='basic-line')運行上面的代碼后,結(jié)果如圖1-6所示。圖1-6案例運行結(jié)果我們看到,這個案例在JupyterNotebook中繪圖成功。注意有些讀者可能是第一次接觸JupyterNotebook,不知道如何導(dǎo)入.ipynb文件,這里簡單介紹一下當(dāng)我們打開JupyterNotebook后默認(rèn)情況下在當(dāng)前目錄中找不到案例文件first_start.ipynb,可以按以下步驟導(dǎo)入這個文件?!?0·第1章快速開始打開JupyterNotebook網(wǎng)頁后,單擊“Upload”按鈕,如圖1-7所示。這時會彈出一個文件管理器窗口選擇文件first_start.ipynb然后再次單“Upload按鈕,就會在當(dāng)前目錄下看到first_start.ipynb文件,雙擊該文件打開即可。圖1-7加載文件1.6使用離線繪圖庫通過前面的案例,我們可以看到Plotly的繪圖結(jié)果雖然美觀,但是繪圖速度太慢原因是Plotly的服務(wù)器在國外國內(nèi)用戶使用Plotly的在線繪圖會有網(wǎng)絡(luò)延遲。如果僅有在線繪圖恐怕Plotly不會發(fā)展得這么快一是如果用戶都使用在線繪圖,會導(dǎo)致官方的服務(wù)器壓力增大,這樣免費服務(wù)無法長久維持下去或體驗越來越差;二是這種繪圖速度國內(nèi)用戶是無法接受的,所以開源的動態(tài)繪圖模塊Plotly支持離線繪圖功能。Plotly的離線繪圖功能允許在沒有網(wǎng)絡(luò)的情況下繪圖,并把圖像保存到本地。有兩種方法可以實現(xiàn)上述功能:plotl.offline.plot()和plotl.offline.iplot()。y使用plotl.offline.plot()方法會在本地新建一個HTML文件,并可以選擇是否在瀏覽器中打開這個文件。y使用plotl.offline.iplot()方法會在JupyterNotebook中直接繪圖而不需要新建一個HTML文件。案例代碼如下(見文件Chapter01/first_offline_start.py。importplotlyaspyfromplotly.graph_objsimportScatter,Layout,Datatrace0=Scatter(x=[1,2,3,4],y=[10,15,13,17]·1·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖)trace1=Scatter(x=[1,2,3,4],y=[16,5,11,9])data=Data([trace0,trace1])py.offline.plot(data,filename='first_offline_start')運行以上代碼,結(jié)果如圖1-8所示。圖1-8案例運行結(jié)果在JupyterNotebook中需要注意的是,這里需要添加一個初始化步驟,在開始繪圖之前要加入一行代碼。plotly.offline.init_notebook_mode()詳細(xì)代碼如下(見文件Chapter01/first_offline_start.ipynb。importplotlyaspyfromplotly.graph_objsimportScatter,Layout,Datapy.offline.init_notebook_mode()trace0=Scatter(x=[1,2,3,4],y=[10,15,13,17]·12·第1章快速開始)trace1=Scatter(x=[1,2,3,4],y=[16,5,11,9])data=Data([trace0,trace1])py.offline.iplot(data,filename='first_offline_start')代碼運行結(jié)果如圖1-9所示,與上一個案例的輸出效果一樣。圖1-9案例運行結(jié)果由于在線繪圖和離線繪圖的繪圖結(jié)果沒有什么不同,所以對于在線繪圖,讀者可以自己動手修改代碼。1.7參數(shù)解讀p.plot是繪制圖形的主函數(shù),其主要參數(shù)如下。yshow_link默認(rèn)為rue,顯示右下角的鏈接。ylink_text:右下角顯示的文字,默認(rèn)為Exporttoplotlly。yvalidate:默認(rèn)為rue,確保所有關(guān)鍵字是有效的。但是當(dāng)需要額外、非必需的關(guān)鍵字或plotl.js版本比graph_reference.json版本舊時,會忽略這部分內(nèi)容。yfilenae:設(shè)置繪圖結(jié)果的存儲路徑,默認(rèn)為temp-plot.htl?!?3·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖1.8查看幫助查看幫助的操作很簡單,只需要如下簡單的兩行代碼。#使用在線繪圖查看幫助的方法importplotly.plotlyaspyhelp(py.plot)對于使用JupyterNotebook的讀者,可以使用如下代碼查看幫助。#使用JupyterNotebook在線繪圖查看幫助的方法importplotly.plotlyaspyhelp(py.iplot)對于離線繪圖模式,有如下兩種查看幫助的方法。#使用離線繪圖查看幫助的方法importplotlyhelp(plotly.offline.plot)#使用JupyterNotebook離線繪圖查看幫助的方法importplotlyhelp(plotly.offline.iplot)其中一個查看幫助的結(jié)果代碼如下。Signature:plotly.offline.iplot(figure_or_data,show_lik=True,link_text='Exporttoplot.ly',validate=True,image=Non,filename='plot_image',image_width=800,image_height=600,configNone)Docstring:DrawplotlygraphsinsideanIPythonorJupyternotebookwithoutconnectingtoanexternalserver.TosavethecharttoPlotlyCloudorPlotlyEnterprise,use`plotly.plotly.iplot`.Toembedanimageofthechart,use`plotly.image.ishow.figure_or_data--apotly.graph_bjs.Figureorplotlygraph_objs.DataordictorlistthatdescribesaPlotlygraph.Seehttps://plot.ly/python/forexamplesofgraphdescriptions.·14·第1章快速開始Keywordarguments:show_link(default=True)--displayalinkinthebottom-rightcornerofofthechartthatwillexportthecharttoPlotlyCloudorPlotlyEnterpriselink_text(default='Exporttoplot.ly')--thetextofxportlinkvalidate(default=True)--validatethatallofthekeysinthefigurearevalid?omitifyourversionofplotly.jshasbecomeoutdatedwithyourversionofgraph_reference.jsonorifyouneedtoincludeextra,unnecessarykeysinyourfigure.image(default=None|'png'|'jpeg'|'svg'|'webp')--Thisparametersetstheformatfthemagetobedownloaded,ifwechosetodownloadanimage.ThisparameterhasadefaultvalueofNoneindicatingthatnoimageshouldbedownloaded.Pleasenote:forhigherresolutionimagesandmoreexpotoptions,considermakingrequeststoourimageservers.Type:`help(py.image)`formoredetails.filename(default='plot')--Setsthenameofthefileourimagewillbesavedto.Theextensionshouldnotbeincluded.image_height(default=600)--Specifiestheheightoftheimagein`px`.image_width(default=800)--Specifiesthewidthoftheimagein`px`.config(default=None)--Plotviewoptionsditionary.Keywordarguments`show_link`and`link_text`settheassociatedoptionsnthisdictionaryifitdoesn'tcontainthemalready.Example:```fromplotly.offlineimportinit_notebook_mode,iplotinit_notebook_mode()iplot([{'x':[1,2,3],'y':[5,2,7]}])#Wecanalsodownloadanimageoftheplotbysettingtheimagetotheformatyouwant.e.g.`image='png'`iplot([{'x':[1,2,3],'y':[5,2,7]}],image='png')```File: d:\anaconda3\lib\site-packages\plotly\offline\offline.pyType:function·15·2第2章Plotly基礎(chǔ)圖形Plotly繪圖模塊庫支持的圖形格式很多,其繪圖對象包括如下幾種。yAngularaxis:極坐標(biāo)圖表。yArea:區(qū)域圖。yBar:條形圖。yBox:盒形圖,又稱箱線圖、盒子圖、箱圖。yCandlestick與OHLC:金融行業(yè)常用的K線圖與OHLC曲線圖。yColorBar:彩條圖。yContour:輪廓圖(等高線圖。yChoropleth等值線圖。yLine:曲線圖。yHeatap:熱點圖。yHistogra:直方圖。yHistogram2d:2D平面直方圖。yHistogram2dContour:二維輪廓直方圖。yPie:扇形圖。yScatter:坐分布圖(包括線形圖、散點圖。本章將介紹最常用的幾種圖形格式線形圖散點圖條形圖餅圖直方圖、面積圖、甘特圖,以及金融行業(yè)常用的K線圖等。第2章Plotly基礎(chǔ)圖形2.1基礎(chǔ)案例讀下面通過案例介紹在Python語言中使用Plotly繪圖模塊庫由于使用在線繪圖模式繪圖速度較慢,而且使用在線繪圖模式需要注冊賬號,所以這里只介紹離線繪圖模式。案例2-1的文件名是first_start_introduction.py講解使用Plotly繪圖模塊庫進行最簡單的繪圖。為了便于逐行講解案例,此處采用直接截圖的方式展示代碼,如圖2-1所示。圖2-1案例2-1代碼截圖案例2-1代碼逐行說明如下。y第1行說該代碼文件使用的是UTF-8編碼格式也是Python的例行文件頭。y第24行,導(dǎo)入(iport)所需的模塊庫。y第6行義一個名為trace0的變量用于保存繪圖數(shù)據(jù)Plotly一般稱一個繪圖對象為trace(畫痕、畫軌、畫跡;每個繪圖對象都由Plotly模塊庫里面的graph_obj圖像對象子模塊的Scatte(數(shù)據(jù)局對象定義Scatter對象的輸入數(shù)據(jù)與Plotly繪圖模塊庫中的許多函數(shù)和對象一樣,都是字典格式,而且接受多種復(fù)雜的復(fù)合字典格式。·17·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖y第78行定義變量trace0的x和y坐標(biāo)坐標(biāo)采用列表數(shù)據(jù)格式坐標(biāo)xy的數(shù)據(jù)長度必須一樣,不然會出現(xiàn)空缺坐標(biāo);其中的x、y字符是Plotly模塊庫Scatter對象的內(nèi)部變量名稱,類似關(guān)鍵字。y第2線1第68。y第14行,定義一個變量名data,通過pygo模塊庫的Data函數(shù),把代表兩條曲線的變量trace0和trace1定義為一組圖形數(shù)據(jù),注意Data數(shù)的輸入?yún)?shù)是列表數(shù)據(jù)格式,所以要在變量trace0和trace1外面加上表示列表的“[]”符號。y第16行根據(jù)data變的數(shù)據(jù)繪制圖形若代碼無誤正確運行后程序會自動調(diào)用瀏覽器,打開生成的圖形,并提供互動顯示,運行結(jié)果如圖2-2所示。y第20行運行結(jié)束后輸“ok信息本程序運行后輸出的圖形是通過瀏覽器顯示的,有時瀏覽器在后臺,不知道程序運行已經(jīng)完成,所以在程序最后增加了一行運行結(jié)束的提示信息。圖2-2案例2-1運行結(jié)果案例2-1的第17行和第18行代碼表示不同的輸出模式,下面詳細(xì)說明。第16行中的filename參數(shù),文件名格式必須以“.html”為后綴,以“.htm”為后綴會出錯,讀者可以嘗試一下。運行第17行和第18行代碼時,請先屏蔽第16行代碼,以免混亂。第17行不使用filename參數(shù)定義文件名,Plotly模塊庫會自動在當(dāng)前代碼目錄·18·第2章Plotly基礎(chǔ)圖形P下生成一個名為temp-plot.html的文件并自動用瀏覽器打開對于多個圖形,lotly模塊庫會生成多個HTML文件,再用瀏覽器自動打開,用戶需要自己設(shè)置文件名,否則新的圖形文件會覆蓋舊的圖形文件。Pi第18行使用image參數(shù)設(shè)置輸出的靜態(tài)圖片格式為PNG格式,mage參數(shù)支持PNG、JPEG、SVG、ebP格式,默認(rèn)是None(無。i與其他繪圖模塊庫不同,Plotly生成的不是圖形文件,而是一個內(nèi)置JavaScript腳本的HTML網(wǎng)頁文件,最終的圖像文件需要調(diào)用瀏覽器的渲染引擎才能生成。用戶設(shè)置image圖形輸出格式后,瀏覽器會彈出一個下載圖片對話框,需要用戶手動保存輸出的圖形,如圖2-3所示。圖2-3下載圖片對話框可能因為Plotly繪圖模塊庫重點是云端及商業(yè)用戶所以對離線用戶有些限制,這也算是目前Plotly的一個小bug,希望未來的版本能夠改進。2.2基本繪圖流程經(jīng)過以上分析使用Plotly繪圖模塊庫進行繪圖的完整流程應(yīng)該包括以下命令。y添加圖軌數(shù)據(jù)(add_trace,使用是Scatter函數(shù)命令?!?9·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖y設(shè)置畫面布局,使用layout命令。y集成圖形、布局?jǐn)?shù)據(jù),命令有Data、Figure。y繪制圖形的輸出,命令是ofline.plo,自定義的短命令是pyplt。這個繪圖流程對絕大部分Plotly繪圖案例都適用,接下來講解Plotly的一些常見圖形的繪制方法。2.3點圖2.3.1基本案例線形圖又稱為曲線圖,是最常用的圖形類型。與傳統(tǒng)的繪圖軟件不同,Plotly沒有獨立的線形圖函數(shù),而是把線形圖與散點圖全部用Scatter函數(shù)實現(xiàn)。下面的代(見文件scatter_basic_demo.py是基本散點圖的繪制方法包括線形圖與散點圖兩種圖形的混合。importplotlyaspyimportplotly.graph_objsasgo#----------predefpyplt=py.offline.plot#----------code#CreaterandomdatawithnumpyimportnumpyasnpN=100random_x=np.linspace(0,1,N)random_y0=np.random.randn(N)+5random_y1=np.random.randn(N)random_y2=np.random.randn(N)-5#Createtracestrace0=go.Scatter(·20·第2章Plotly基礎(chǔ)圖形x=random_x,y=random_y0,mode='markers',#純散點的繪圖name='markers'#曲線名稱)trace1=go.Scatter(x=random_x,y=random_y1,mode='lines+markers',#“散點+線”的繪圖name='lines+markers')trace2=go.Scatter(x=random_x,y=random_y2,mode='lines',#線的繪圖name='lines')data=[trace0,trace1,trace2]pyplt(data,filename='tmp\scatter_basic_demo.html')代碼運行結(jié)果如圖2-4所示。圖2-4代碼運行結(jié)果, 、查看案例源碼可以看出markerslines和lines+markers三個圖形的輸出格式不同,是因為Scatter函數(shù)中的mode參數(shù)不, 、·21·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖mode='markers',#xtr1,散點圖mode='lines',#xtr2,線形圖,mode='lines+markers',#xtr3,線形圖+散點圖組合2.3.2樣式設(shè)置下面的代(見文件scatter_style.py用來設(shè)置點的大小和顏色以及線條的大小和顏色。importplotlyaspyimportplotly.graph_objsasgoimportnumpyasnp#----------predefpyplt=py.offline.plot#----------codeN=500x=np.random.randn(N)trace0=go.Scatter(x=np.random.randn(N),y=np.random.randn(N)+2,name='Above',mode='markers+lines',marker=dict(size=10,#設(shè)置點的寬度color='rgba(152,0,0,.8)',#設(shè)置點的顏色line=dict(width=2,#設(shè)置線條的寬度color='rgb(0,0,0)'#設(shè)置線條的顏色)))·22·第2章Plotly基礎(chǔ)圖形trace1=go.Scatter(x=np.random.randn(N),y=np.random.randn(N)-2,name='Below',mode='markers',marker=dict(size=10,color='rgba(255,182,193,.9)',line=dict(width=2,)))data=[trace0,trace1]layout=dict(title='StyledScatter',yaxis=dict(zeroline=True),#顯示y軸的0刻度線xaxis=dict(zeroline=False)#不顯示x軸的0刻度線)fig=dict(data=data,layout=layout)pyplt(fig,filename='tmp\scatter_style.html')代碼運行結(jié)果如圖2-5所示。圖2-5代碼運行結(jié)果·23·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖在這個案例中,重要的是marker參數(shù)的設(shè)置:marker=dict(size=10,#設(shè)置點的寬度color='rgba(152,0,0,.8)',#設(shè)置點的顏色line=dict(width=2,#設(shè)置線條的寬度color='rgb(0,0,0)'#設(shè)置線條的顏色))這里size設(shè)置的是點的寬度,width設(shè)置的是線條的寬度,第一個color設(shè)置的是點的顏色第二個color設(shè)置的是線條的顏色讀者可以對這些參數(shù)進行修改實際驗證一下。需要注意的是,Plotly中的這些參數(shù)在其他繪圖函數(shù)中可以重復(fù)使用,這也是Plotly人性化的地方。2.3.3應(yīng)用案例本案例的文件名是scatter_appl.py,講解Scatter函數(shù)的使用方法,繪制曲線圖與散點圖,以及曲線圖與散點圖的組合圖,代碼如下。#-*-coding:utf-8-*-importpandasaspdimportpandasaspdimportplotlyaspyimportplotly.graph_objsaspygo#----------predefpd.set_option('display.width',450)pyplt=py.offline.plot#----------codedf=pd.read_csv('dat/tk01_m15.csv')df9=df[:10];print(df9)·24·第2章Plotly基礎(chǔ)圖形#idx=df9['xtim']xd0=(df9['close']-27)*50df2=df9df2['xd1']=xd0-10df2['xd2']=xd0df2['xd3']=xd0+10print('xd2\n',df2);#--------xtr1=pygo.Scatter(x=idx,y=df2['xd1'],mode='markers',#xtr1,散點圖name='xtr1-markers',)xtr2=pygo.Scatter(x=idx,y=df2['xd2'],mode='lines',#xtr2,曲線圖name='xtr2-lines',)xtr3=pygo.Scatter(x=idx,y=df2['xd3'],mode='markers+lines',#xtr3,曲線圖+散點圖name='xtr3-markers+lines',)xdat=pygo.Data([xtr1,xtr2,xtr3])layout=pygo.Layout(title='收盤價--15分鐘分時數(shù)據(jù)',xaxis=pygo.XAxis(tickangle=-15),)fig=pygo.Figure(data=xdat,layout=layout,filename=r'tp\scatter_apply.html')pyplt(fig)·25·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖#print('ok')代碼運行結(jié)果如圖2-6所示。圖2-6代碼運行結(jié)果2.3.4參數(shù)解讀使用Scatter函數(shù)可以繪制線形圖與散點圖,主要參數(shù)如下。yconnectgaps:布爾變量,用于連接缺失數(shù)據(jù)。ydx、dy:x、y坐標(biāo)軸的進值,默認(rèn)值是1。yerror_x、error_y:x、y出錯信息。yfillcolor:填充顏色。yfill:填充模式,包括格式、顏色等。yhoverino用戶與圖形互動時鼠標(biāo)指針顯示的參數(shù)包括xyz坐標(biāo)據(jù),以及text(文字信息、nae(圖形名稱)等參數(shù)的組合,可使用+、all、none和skip(忽略)作為組合連接符號,默認(rèn)是all(全部消失?!?6·第2章Plotly基礎(chǔ)圖形yhoveron用戶與圖形互動時鼠標(biāo)指針顯示的模式包括point(圖flls(填充圖)和points+fills(點圖+填充圖)三種模式。yids:在動畫圖表中,數(shù)據(jù)點和圖形key鍵的列表參數(shù)。ylegendgroup:圖例參數(shù),默認(rèn)是空字符串。yline:線條參數(shù),包括線條寬度、顏色、格式。ymarker:數(shù)據(jù)節(jié)點參數(shù),包括大小、顏色、格式等。ymode:圖形格式,包括lines(線形圖、arkers(散點圖)和text(文本使用+或none等符號進行模式組合。ynae:名稱參數(shù)。yopacity:明度參數(shù),范圍是0~1。yrsrc、xsrc、ysrc、tsrc、idssrc、textsrc、textpositionsrc:字符串源數(shù)組列表,可作為Plotly網(wǎng)格標(biāo)識符,用于設(shè)置特殊圖表所需的r參數(shù)、x參數(shù)、y參數(shù)、t參數(shù)、ids參數(shù)、text(文本)參數(shù)和textposition(文本位置)參數(shù)。yr、t:僅用于極坐標(biāo)圖,r用于設(shè)置徑向坐標(biāo)(半徑,t用于設(shè)置角坐標(biāo)。yshowlegend:布爾變量,用于切換圖標(biāo)顯示。ystrea:數(shù)據(jù)流,用于實時顯示數(shù)據(jù)圖表。ytextfont:文本字體參數(shù),包括字體名稱、顏色、大小等。ytextposition“文本元素的位置參數(shù)包括toplef(左上topcente(中上、toprigh(上iddlelef(左中iddlecente(中心iddleigh(中、bottomleft(左下、bottomcenter(中下、ottomrigh(右)模式,默認(rèn)是middlecenter(中心)模式。ytext:文本數(shù)據(jù),設(shè)置與每個(x,y)對”關(guān)聯(lián)的文本元素和數(shù)組列表格式,默認(rèn)是空字符串。ytype數(shù)據(jù)示模式包括constan常數(shù)prcen(百分sqr(平根、array(數(shù)組)模式。yx0、y0:坐標(biāo)軸起點坐標(biāo)。yxaxis,yaxis:x、y坐參數(shù)。yxcalendar、ycalendar:坐標(biāo)時間參數(shù)的格式,默認(rèn)是公歷(gregorian,支持gregorianchinesecopticdiscworldehiopianhebrewislaicjulianayan、nanakshahi、nepali、persian、jalali、taiwan、thai和ualqura格式。yx,y:設(shè)置x、y軸的坐標(biāo)數(shù)據(jù)。·27·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖2.4泡圖氣泡圖的實現(xiàn)方法與散點圖的實現(xiàn)方法類似,修改散點圖中的點的大小,就變成了氣泡圖。2.4.1基本案例下面的代碼(見文件bubble_basic_demo.py)用來說明氣泡圖的基本繪制方法。importplotlyaspyimportplotly.graph_objsasgo#----------predefpyplt=py.offline.plot#----------codetrace0=go.Scatter(x=[1,2,3,4],y=[10,11,12,13],mode='markers',marker=dict(size=[40,60,80,100],))data=[trace0]pyplt(data,filename='tmp/bubble_baisc_demo.html')代碼運行結(jié)果如圖2-7所示。以上代碼的核心代碼如下,用來定義每一個點的大小:marker=dict(size=[40,60,80,100],)·28·第2章Plotly基礎(chǔ)圖形圖2-7代碼運行結(jié)果2.4.2樣式設(shè)置下面的代(見文件bubble_style.py用來指定每個點的大小顏色懸浮文字和是否顯示顏色條。importplotlyaspyimportplotly.graph_objsasgo#----------predefpyplt=py.offline.plot#----------codetrace0=go.Scatter(x=[1,2,3,4],y=[10,11,12,13],mode='markers',text=['A<br>size:40','B<br>size:60','<br>size:80','D<br>size:100'],marker=dict(color=[120,125,130,135],opacity=[1,0.8,0.6,0.4],size=[40,60,80,100],showscale=True,·29·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖))data=[trace0]pyplt(data,filename='tmp/bubble_style.html')代碼運行結(jié)果如圖2-8所示。圖2-8代碼運行結(jié)果以上代碼的核心代碼如下,text指定每個點對應(yīng)的懸浮文字(<br>表示換行,color指定每個點的顏色,opacity指定每個點的透明度,size指定每個點的大小,showscale=rue表示顯示右邊的顏色條的大小。text=['A<br>size:40','B<br>size:60','C<br>size:80','D<br>size:100'],marker=dict(color=['rgb(93,164,214)','rgb(255,144,14)','rgb(44,160,101)','rgb(255,65,54)'],opacity=[1,0.8,0.6,0.4],size=[40,60,80,100],showscale=True,)2.4.3縮放設(shè)置調(diào)節(jié)氣泡尺寸的大小可通過sizeref參數(shù)進行設(shè)置當(dāng)sizeref值大于1時將減·30·第2章Plotly基礎(chǔ)圖形小氣泡的大小;當(dāng)sizeref值小于1時,將增大氣泡的大小,詳情參考頁面https://plot.ly/python/reference/#scatter-marker-sizeref。本案例代碼(見文件bubble_scale.py)如下。importplotlyaspyimportplotly.graph_objsasgo#----------predefpyplt=py.offline.plot#----------codetrace0=go.Scatter(x=[1,2,3,4],y=[10,11,12,13],text=['A</br>size:40</br>default','B</br>size:60</brdefault','C</br>size:80</br>default','D</br>size:100</br>defalt'],mode='markers',name='default',marker=dict(size=[400,600,800,1000],sizemode='area',))trace1=go.Scatter(x=[1,2,3,4],y=[14,15,16,17],text=['A</br>size:40</br>sizeref:0.2','B</br>size:60</br>sizeref:0.2','C</br>size:80</br>sizeref:0.2','D</br>size:10</br>sizeref:0.2'],mode='markers',name='ref0.2',marker=dict(size=[400,600,800,1000],sizeref=0.2,sizemode='area',)·31·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖)trace2=go.Scatter(x=[1,2,3,4],y=[20,21,22,23],text=['A</br>size:40</br>sizeref:2','B</br>size:60</br>sizeref:2','C</br>size:80</br>sizeref:2','D</br>size:100</r>sizeref:2'],mode='markers',name='ref2',marker=dict(size=[400,600,800,1000],sizeref=2,sizemode='area',))data=[trace0,trace1,trace2]pyplt(data,filename='tmp/bubble_scale.html')代碼運行結(jié)果如圖2-9所示。圖2-9代碼運行結(jié)果與之前的代碼相比多了如下參數(shù)內(nèi)容:參數(shù)sizeref=2表示將氣泡大小設(shè)置為原來的1/2;參數(shù)sizemode有diameter和area兩個值,diameter表示按直徑縮放,area表示按面積縮放,這里使用的是按面積縮放?!?2·第2章Plotly基礎(chǔ)圖形marker=dict(size=[400,600,800,1000],sizeref=2,sizemode='area',)2.4.4參數(shù)解讀氣泡圖與散點圖使用的是同一個函數(shù)因此大部分參數(shù)在2.3.4小節(jié)已經(jīng)介紹過了,這里對本節(jié)所涉及的參數(shù)進行補充說明。ytext:列表,元素為相應(yīng)節(jié)點的懸浮文字內(nèi)容。ymarker:數(shù)據(jù)節(jié)點參數(shù),包括大小、顏色、格式等,有如下設(shè)置項。?size:列表,元素為相應(yīng)節(jié)點的尺寸大小。?sizeref:縮放的比例,如設(shè)置為2,則縮小為原來的1/2。?sizemode:縮放的標(biāo)準(zhǔn),默認(rèn)以diameter(直徑)縮放,也可選擇以area(面積)縮放。?color:列表,元素為相應(yīng)節(jié)點的顏色。?showscale:默認(rèn)為False,不顯示右側(cè)的顏色條,也可以選擇rue。?opacity:列表,元素為0~1之間的數(shù),表示相應(yīng)節(jié)點的透明度。2.5形圖2.5.1基本案例線形圖的繪制在散點圖的繪制中提及過用Plotly繪制線形圖使用Scatter函數(shù)。如圖2-10所示是線形圖的簡單實現(xiàn)見文件2.5_LineChart_1.py本案例使用Pandas生成時間序列作為橫軸標(biāo)簽對浦發(fā)銀行2017年3月1日—2017年4月28日的股價漲跌幅進行了展現(xiàn),數(shù)據(jù)來源是ind數(shù)據(jù)庫。·33·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖圖2-10基本線形圖#2.5-1基本案例importplotlyaspyimportplotly.graph_objsasgo#BasicLinepyplt=py.offline.plot#600000浦發(fā)銀行20170301-20170428漲跌幅度數(shù)據(jù),數(shù)據(jù)來源Windprofit_rate=-0.001,-0.013,-0.004,0.002,0.003,-0.001,-0.009,0.0,\0.007,-0.005,0.0,0.001,-0.006,-0.006,-0.009,-0.013,0.05,0.007,\0.004,-0.006,-0.009,-0.004,0.015,0.007,0.001,0.003,-0.009,\-0.005,0.001,-0.008,-0.016,0.002,-0.013,-0.009,-0.014,0.009,\-0.003,0.002,-0.001,0.011,0.004]date=pd.date_range(start='3/1/2017',end='4/30/207')trace=[go.Scatter(x=date,y=profit_rate)]layout=dict(·34·第2章Plotly基礎(chǔ)圖形title='浦發(fā)銀行20170301-20170428漲跌幅變化',xaxis=dict(title='Date'),yaxis=dict(title='profit_rate'))fig=dict(data=trace,layout=layout)pyplt(fig,filename='tmp/basic-line.html')2.5.2數(shù)據(jù)缺口與連接在實際應(yīng)用過程中,數(shù)據(jù)集往往并不完美,可能有缺失的數(shù)據(jù),在Plotly中可以通過設(shè)置Scatter函數(shù)中的connectgaps屬性來顯示這些數(shù)據(jù)缺口或?qū)θ笨谶M行連接。如圖2-1所示是在官方案例的基礎(chǔ)上進行的調(diào)整,包含了多條線形圖的繪制、線條樣式設(shè)置,以及數(shù)據(jù)缺口保留與連接的控制,見文件2.5_LineChart_2.py。圖2-1線形圖缺失數(shù)據(jù)展示與連接該案例的代碼如下。#2.5-2應(yīng)用案例#AverageHighandLowTemperaturesinNewYork·35·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plotmonth=['Jnuary','February','March','Apil','May','June','July','August','September','October','November','December]#x軸坐標(biāo)high_2000=[32.5,37.6,49.9,53.0,None,75.4,76.5,76.6,70.7,60.,45.1,29.3]low_2000=[13.8,22.,32.5,37.2,None,56.1,57.7,58.3,51.2,42.8,31.6,15.9]high_2007=[36.5,26.6,43.6,52.3,None,81.4,80.5,82.2,76.0,67.,46.1,35.0]low_2007=[23.6,14.,27.0,36.8,None,57.7,58.9,61.2,53.3,48.5,31.0,23.6]high_2014=[28.8,28.5,37.0,56.8,None,79.7,78.5,77.8,74.1,62.,45.3,39.9]low_2014=[12.7,14.,18.6,35.5,None,58.0,60.0,58.6,51.7,45.2,32.2,29.1]#6組數(shù)據(jù)#Createandstyletracestrace0=go.Scatter(x=month,y=high_2014,name='High2014',line=dict(color=('rgb(205,12,24)'),width=4),connectgaps=True)trace1=go.Scatter(x=month,y=low_2014,name='Low2014',line=dict(color=('rgb(22,96,167)'),width=4,),connectgaps=False·36·第2章Plotly基礎(chǔ)圖形)trace2=go.Scatter(x=month,y=high_2007,name='High2007',line=dict(color=('rgb(205,12,24)'),width=4,dash='dash'),connectgaps=False)#dash虛線(短線,dot虛線(點,dashdottrace3=go.Scatter(x=month,y=low_2007,name='Low2007',line=dict(color=('rgb(22,96,167)'),width=4,dash='dash'),connectgaps=False)trace4=go.Scatter(x=month,y=high_2000,name='High2000',line=dict(color=('rgb(205,12,24)'),width=4,dash='dot'),connectgaps=False)trace5=go.Scatter(x=month,y=low_2000,name='Low2000',·37·Python數(shù)據(jù)分析:基于Plotly的動態(tài)可視化繪圖line=dict(color=('rgb(22,96,167)'),width=4,dash='dot'),connectgaps=False)data=[trace0,trace1,trace2,trace3,trace4,trace5]#Editthelayoutlayout=dict(title='AverageHighandLowTemperaturesinNewYork',xaxis=dict(title='Month'),yaxis=dict(title='Temperature(degreesF)'),)fig=dict(data=data,layout=layout)pyplt(fig,filename='tmp/styled-line.html')在數(shù)據(jù)部分原先的缺失數(shù)據(jù)被設(shè)置為None在Scatter函數(shù)中設(shè)置connectgaps屬性為Fasle,表示不連接,顯示數(shù)據(jù)缺口;設(shè)置connectgaps屬性為rue,表示連接缺失值左右相鄰的數(shù)據(jù)點在圖2-1中“High2014線形圖進行了連接其他線條則采用顯示缺口的形式。Scatter函數(shù)中的line屬性用于對線形圖的樣式進行控制;color用于設(shè)置顏色;width用于設(shè)置寬度;dash用于設(shè)置類型,dash表示由短線組成的虛線,dot表示由點組成的虛線,dashdot表示由點和短線組成的虛線。2.5.3數(shù)據(jù)插值通過調(diào)整Scatter函數(shù)line屬性中的shape值可以對插值的方法進行控制,完成數(shù)據(jù)點的插值設(shè)置。插值的方法簡單來說就是根據(jù)已有的零散數(shù)據(jù)點,找到一條滿足一定條件的曲線,使之經(jīng)過全部的數(shù)據(jù)點。Plotly提供的插值方法有6種,分別是'linear'、'spline'、'hv'、'vh'、'hvh'和'vhv'。例如,設(shè)置shape='spline',表示通過三次樣條方法對數(shù)據(jù)點進行插值圖2-12所示為官方案例展示了6種不同的插值方法,見文件2.5_LineChart_3.py?!?8·第2章Plotly基礎(chǔ)圖形圖2-12不同插值方法的對比該案例的代碼如下。#2.5-3應(yīng)用案例importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3,4,5],y=[1,3,2,3,1],mode='lines+markers',name="'linear'",hoverinfo='name',line=dict(shape='linear'))trace2=go.Scatter(x=[1,2,3,4,5],y=[6,8,7,8,6],mode='lines+markers',name="'spline'",text=["tweaklinemoo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論