python用pyecharts畫矩形樹圖實(shí)例
一、概念介紹
矩形樹圖(Treemap),即矩形式樹狀結(jié)構(gòu)圖,利用矩形的面積表示數(shù)值的大小,顏色用于類別區(qū)分,常用于呈現(xiàn)多類別的一維數(shù)值比較,易讀性強(qiáng);基于樹狀的功能,在結(jié)構(gòu)圖中可以同時(shí)呈現(xiàn)數(shù)據(jù)層次的信息。
示例如下:
· 對(duì)比常見的柱狀圖和條形圖,矩形樹圖彌補(bǔ)了以下三個(gè)缺點(diǎn):
1、當(dāng)我們的數(shù)據(jù)是多類別且每個(gè)類別只有一個(gè)數(shù)值時(shí),我們用柱狀圖會(huì)浪費(fèi)很多的空間,而且顯得單調(diào)。
2、當(dāng)數(shù)據(jù)間差異較大(235 vs 18),會(huì)是對(duì)我們柱狀圖的縱坐標(biāo)設(shè)定帶來(lái)困擾,忽略極差會(huì)稀釋我們小值類的差異。(當(dāng)然 ,如果我們的大值只有那么一兩個(gè),可以單拎出來(lái)處理)
3、柱狀圖無(wú)法呈現(xiàn)數(shù)據(jù)間的層級(jí)結(jié)構(gòu)
二、數(shù)據(jù)展示
我們的目的是為了呈現(xiàn)類間數(shù)值大小差異,如果有第二層,也順便比較第二層的占比情況。
為了展示多各類別,我們利用的是省份的數(shù)據(jù),excel表格中呈現(xiàn)如下:
第二層、第三層為了樹狀的呈現(xiàn)而隨機(jī)生成,也是為了說(shuō)明,樹層結(jié)構(gòu)并不要求每個(gè)節(jié)點(diǎn)都有枝葉。
三、數(shù)據(jù)導(dǎo)入
我們先繪制只有一維的,只需要輸入【省份】【關(guān)注類】?jī)蓚€(gè)列,這個(gè)其實(shí)更常用一點(diǎn)(我的角度)
province_type1 = pd.DataFrame(pd.read_excel('./各省市上市公司個(gè)數(shù)/矩形樹圖示例.xlsx')) tree = [] name = [province_type1['省份'][i]+'\n'+str(province_type1['關(guān)注類A'][i]) for i in range(len(province_type1))] for i in range(len(province_type1)): dic = {} dic["value"],dic["name"] = int(province_type1['關(guān)注類A'][i]),name[i] tree.append(dic)
①name--列表型數(shù)據(jù)結(jié)構(gòu),用于存放每個(gè)數(shù)據(jù)的label,這里我為了同時(shí)呈現(xiàn)數(shù)據(jù)對(duì)應(yīng)的省份和大小,中間用了換行符(不用的話,在我們的樹圖上是一行,不好看)
②繪制矩形樹圖需要的是list,list里面是字典,key名指定為"name","value"。
③一定要注意的是,如果你畫出來(lái)的圖沒有數(shù)據(jù)或者沒有顯示,檢查是不是讀excel數(shù)據(jù)中出現(xiàn)了問題,即上述代碼中int的位置。
用于繪制treemap的數(shù)據(jù)結(jié)構(gòu)如下所示:
四、圖像繪制
tm = ( TreeMap() .add("關(guān)注類A",tree) .set_series_opts(label_opts=opts.LabelOpts(position='inside')) .set_global_opts(title_opts=opts.TitleOpts(title = '',subtitle = '2022/1/18-林老頭ss')) ) tm.render('./繪圖結(jié)果/矩形樹圖-例一.html')
position---指定label,即我們的name的位置,inside會(huì)居中顯示。如果不加,默認(rèn)top,在每個(gè)矩形上方顯示。
結(jié)果如下所示:
由上圖可知,廣東省、浙江省和江蘇省在隨機(jī)數(shù)據(jù)中排名前三。受顯示區(qū)域的限制,數(shù)據(jù)較小或名字過(guò)長(zhǎng)的矩形往往不能顯示完全,需要交互式放大其數(shù)值。
五、樹形結(jié)構(gòu)
在加入樹形結(jié)構(gòu)后,我們需要在代碼中相應(yīng)增加key為“children"的數(shù)據(jù)
from pyecharts.charts import Page,TreeMap from pyecharts import options as opts import pandas as pd import math province_type1 = pd.DataFrame(pd.read_excel('./矩形樹圖示例.xlsx')) tree = [] name = [province_type1['省份'][i]+'\n'+str(province_type1['關(guān)注類A'][i]) for i in range(len(province_type1))] for i in range(len(province_type1)): dic = {} dic["value"],dic["name"] = int(province_type1['關(guān)注類A'][i]),name[i] if math.isnan(province_type1['關(guān)注類A-1'][i]) ==0: dic["children"] = [ {"name":province_type1['省份'][i]+"A-1:"+str(province_type1['關(guān)注類A-1'][i]),"value":int(province_type1['關(guān)注類A-1'][i])}, {"name":province_type1['省份'][i]+"A-2:"+str(province_type1['關(guān)注類A-1'][i]),"value":int(province_type1['關(guān)注類A-2'][i])} ] if math.isnan(province_type1['關(guān)注類A1-1'][i]) ==0: dic["children"][0]["children"] = [ {"name":"A1-1:"+str(province_type1['關(guān)注類A1-1'][i]),"value":int(province_type1['關(guān)注類A1-1'][i])}, {"name":"A1-2:"+str(province_type1['關(guān)注類A1-1'][i]),"value":int(province_type1['關(guān)注類A1-2'][i])} ] tree.append(dic) tm = ( TreeMap() .add("關(guān)注類A的樹",tree) .set_series_opts(label_opts=opts.LabelOpts(position='inside')) .set_global_opts(title_opts=opts.TitleOpts(title = '加油呀朋友們~',subtitle = '2022/1/18-林老頭ss')) ) tm.render('./繪圖結(jié)果/矩形樹圖-例二.html')
如果沒有枝葉的類,則不需要在"name""value"平級(jí)上加"children",如果枝葉中有兩個(gè)以上類別,相當(dāng)于是一個(gè)新的樹,需要增加“children”,結(jié)構(gòu)和樹形一致,如下所示:
【“name”:“父節(jié)點(diǎn)”,
"value": number,
"children":【{“name”:“子節(jié)點(diǎn)一”,“value”:number},
{“name”:“子節(jié)點(diǎn)二”,“value”:number},
{“name”:“子節(jié)點(diǎn)三”,“value”:number}
】
】
子序列在顯示區(qū)域允許的情況下,可以繼續(xù)按上述結(jié)構(gòu)增加。
繪制結(jié)果如下所示:
從上圖我們可以看到,盡管我們?yōu)楦割惷@示的結(jié)果只有最小類的名稱和數(shù)值。
pyecharts圖像交互性較強(qiáng),可以通過(guò)點(diǎn)擊不斷聚焦類,放大圖像,但由于不知道怎么呈現(xiàn)給大家,還是鼓勵(lì)大家自己動(dòng)手操作去探索叭~
總結(jié)
到此這篇關(guān)于python用pyecharts畫矩形樹圖實(shí)例的文章就介紹到這了,更多相關(guān)python pyecharts畫矩形樹圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python網(wǎng)絡(luò)爬蟲采集聯(lián)想詞示例
這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲采集聯(lián)想詞示例,需要的朋友可以參考下2014-02-02Python利用PyMuPDF模塊實(shí)現(xiàn)快速轉(zhuǎn)換PDF文件
PDF是一種廣泛使用的文件格式,可以在任何設(shè)備上查看和打印,那么如何用Python和PyMuPDF制作你想要大小的PDF文件呢,本文就來(lái)和大家詳細(xì)講講2023-08-08PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解
今天小編就為大家分享一篇PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python連接到PostgreSQL數(shù)據(jù)庫(kù)的方法詳解
顧名思義,PostgreSQL?是一款為高效管理數(shù)據(jù)庫(kù)系統(tǒng)而創(chuàng)建的?SQL?系統(tǒng)軟件,這篇文章主要為大家詳細(xì)介紹了創(chuàng)建與?PostgreSQL?上的數(shù)據(jù)庫(kù)的連接的過(guò)程,需要的小伙伴可以了解下2023-10-10python數(shù)字圖像處理之圖像自動(dòng)閾值分割示例
這篇文章主要為大家介紹了python數(shù)字圖像處理之圖像自動(dòng)閾值分割示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06