一文速學(xué)Python+Pyecharts繪制樹形圖
前言
之前寫pandas和matplotlib的時(shí)候說(shuō)到了想要出一期Pyechart系列數(shù)據(jù)可視化的文章。比起matplotlib,pyeacharts的圖表要豐富而且好看,這取決于它是基于百度團(tuán)隊(duì)使用Javascript開發(fā)的商業(yè)級(jí)數(shù)據(jù)圖表。而且pyechart文檔全,便于開發(fā)和閱讀文檔,熟練掌握后是一種非常好用的數(shù)據(jù)可視化的工具之一。當(dāng)然相比pandas的plot代碼會(huì)繁瑣一些,其中一些操作類方法也是比較復(fù)雜的,需要對(duì)其有個(gè)大概的掌握才能作出滿意的圖表。
在我之前的文章中也有好幾次使用到了pyechart方法,但是我覺得既然是完成一些數(shù)據(jù)可視化的操作應(yīng)該就要快速可呈現(xiàn),作為數(shù)據(jù)處理能夠得到解析出想要的數(shù)據(jù)就足夠了,如果有個(gè)業(yè)務(wù)小組完全可以將這一部分交給前端去渲染就好了,主要還是快速出圖表給我們自己看,用于調(diào)整代碼而已。那么廢話不多說(shuō)了開始吧!
一、Tree樹圖
pyecharts只能說(shuō)不愧是國(guó)人開發(fā),文檔真的給力,不用再去啃生肉那么痛苦了。很多詳細(xì)的參數(shù)看開發(fā)文檔就可以看明白:pyecharts - A Python Echarts Plotting Library built with love.
我們來(lái)看它給出的基礎(chǔ)例圖:
from pyecharts import options as opts from pyecharts.charts import Tree data = [ { "children": [ {"name": "B"}, { "children": [{"children": [{"name": "I"}], "name": "E"}, {"name": "F"}], "name": "C", }, { "children": [ {"children": [{"name": "J"}, {"name": "K"}], "name": "G"}, {"name": "H"}, ], "name": "D", }, ], "name": "A", } ] c = ( Tree() .add("", data) .set_global_opts(title_opts=opts.TitleOpts(title="Tree-基本示例")) .render("tree_base.html") )
此代碼會(huì)生成一個(gè)網(wǎng)頁(yè):
看對(duì)應(yīng)的前端源代碼:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>tree_base.html</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <style type="text/css"> html, body, #container { height: 100%; } body, #container { overflow: hidden; margin: 0; } #iframe { width: 100%; height: 100%; border: none; } </style> <div id="container"> <iframe id="iframe" sandbox="allow-scripts" src="/files/Hivesqlblood/tree_base.html"></iframe> </div> </body> </html>
sandbox="allow-scripts"允許添加腳本執(zhí)行,也就是將我們編寫的python轉(zhuǎn)換為了js腳本,通過(guò)代碼輸入端口獲取echart的配置:
如果不想生成網(wǎng)頁(yè)將render("tree_base.html")改為render_notebook()即可。
樹形圖有很多種使用場(chǎng)景,比如事件的從屬關(guān)系,
這里更主要的是數(shù)據(jù)處理板塊,如果我們僅想要將一行列表數(shù)據(jù)轉(zhuǎn)換為樹形圖數(shù)據(jù)結(jié)構(gòu)該如何處理。
二、數(shù)據(jù)處理
我們拿到展示數(shù)據(jù)結(jié)構(gòu)為:
[ { "children": [ {"name": "B"}, { "children": [{"children": [{"name": "I"}], "name": "E"}, {"name": "F"}], "name": "C", }, { "children": [ {"children": [{"name": "J"}, {"name": "K"}], "name": "G"}, {"name": "H"}, ], "name": "D", }, ], "name": "A", } ]
也就是結(jié)構(gòu)為 [{"children":[{"name": "B"},{"name": "B"}] ,"name": "temp"}]的類型,我們需要將將數(shù)據(jù)轉(zhuǎn)換為這個(gè)格式數(shù)據(jù),就以通用的list來(lái)說(shuō),如果用樹圖來(lái)表示的話肯定是有一節(jié)點(diǎn)為根節(jié)點(diǎn),一部分節(jié)點(diǎn)為子節(jié)點(diǎn)。就以一個(gè)list來(lái)說(shuō):
list_1=['temp_road_check_20220902', 'dws_crowdsourcing_cs_order_link_mysql', 'track_point_traffic_dev_tk_track_traffic_info_offline']
第一個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn),其余為子節(jié)點(diǎn)。那么我們就可以進(jìn)行這樣分裝:
list_1=['temp_road_check_20220902', 'dws_crowdsourcing_cs_order_link_mysql', 'track_point_traffic_dev_tk_track_traffic_info_offline'] list_children=[] for i in range(len(list_1)-1): children_dict={"name":list_1[i+1]} list_children.append(children_dict) dict_children={"children":list_children,"name": list_1[0]} data=[dict_children]
這樣的話就可以形成樹形圖的格式了:
畫圖也就為:
最好肯定是使用常態(tài)化的思維去封裝這個(gè)方法,通過(guò)數(shù)據(jù)結(jié)構(gòu)調(diào)整方法。
到此這篇關(guān)于一文速學(xué)Python+Pyecharts繪制樹形圖的文章就介紹到這了,更多相關(guān)Python Pyecharts繪制樹形圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python將字符串轉(zhuǎn)變成dict格式的實(shí)現(xiàn)
這篇文章主要介紹了python將字符串轉(zhuǎn)變成dict格式的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Python簡(jiǎn)單生成隨機(jī)數(shù)的方法示例
這篇文章主要介紹了Python簡(jiǎn)單生成隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式分析了Python基于random模塊生成隨機(jī)數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python版opencv攝像頭人臉實(shí)時(shí)檢測(cè)方法
今天小編就為大家分享一篇python版opencv攝像頭人臉實(shí)時(shí)檢測(cè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08python2.7實(shí)現(xiàn)復(fù)制大量文件及文件夾資料
這篇文章主要為大家詳細(xì)介紹了python2.7實(shí)現(xiàn)復(fù)制大量文件及文件夾資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Python中os.system()、subprocess.run()、call()、check_output()的使用
這篇文章主要介紹了Python中os.system()、subprocess.run()、call()、check_output()的使用案例,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07python np.arange 步長(zhǎng)0.1的問題需要特別注意
這篇文章主要介紹了python np.arange 步長(zhǎng)0.1的問題需要特別注意,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python3 QT5 端口轉(zhuǎn)發(fā)工具兩種場(chǎng)景分析
這篇文章主要介紹了python3 QT5 端口轉(zhuǎn)發(fā)工具,功能是打開本機(jī)端口,映射到指定IP的端口,接下來(lái)通過(guò)兩種場(chǎng)景給大家詳細(xì)介紹,感興趣的朋友一起看看吧2022-01-01Python實(shí)戰(zhàn)之手寫一個(gè)搜索引擎
這篇文章主要介紹了Python實(shí)戰(zhàn)之手寫一個(gè)搜索引擎,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04在Python的Django框架中創(chuàng)建語(yǔ)言文件
這篇文章主要介紹了在Python的Django框架中創(chuàng)建語(yǔ)言文件的方法,以語(yǔ)言代碼來(lái)表示語(yǔ)言區(qū)域種類,需要的朋友可以參考下2015-07-07