python用pyecharts畫矩形樹圖實例
一、概念介紹
矩形樹圖(Treemap),即矩形式樹狀結構圖,利用矩形的面積表示數值的大小,顏色用於類別區分,常用於呈現多類別的一維數值比較,易讀性強;基於樹狀的功能,在結構圖中可以同時呈現數據層次的信息。
示例如下:
· 對比常見的柱狀圖和條形圖,矩形樹圖彌補瞭以下三個缺點:
1、當我們的數據是多類別且每個類別隻有一個數值時,我們用柱狀圖會浪費很多的空間,而且顯得單調。
2、當數據間差異較大(235 vs 18),會是對我們柱狀圖的縱坐標設定帶來困擾,忽略極差會稀釋我們小值類的差異。(當然 ,如果我們的大值隻有那麼一兩個,可以單拎出來處理)
3、柱狀圖無法呈現數據間的層級結構
二、數據展示
我們的目的是為瞭呈現類間數值大小差異,如果有第二層,也順便比較第二層的占比情況。
為瞭展示多各類別,我們利用的是省份的數據,excel表格中呈現如下:
第二層、第三層為瞭樹狀的呈現而隨機生成,也是為瞭說明,樹層結構並不要求每個節點都有枝葉。
三、數據導入
我們先繪制隻有一維的,隻需要輸入【省份】【關註類】兩個列,這個其實更常用一點(我的角度)
province_type1 = pd.DataFrame(pd.read_excel('./各省市上市公司個數/矩形樹圖示例.xlsx')) tree = [] name = [province_type1['省份'][i]+'\n'+str(province_type1['關註類A'][i]) for i in range(len(province_type1))] for i in range(len(province_type1)): dic = {} dic["value"],dic["name"] = int(province_type1['關註類A'][i]),name[i] tree.append(dic)
①name–列表型數據結構,用於存放每個數據的label,這裡我為瞭同時呈現數據對應的省份和大小,中間用瞭換行符(不用的話,在我們的樹圖上是一行,不好看)
②繪制矩形樹圖需要的是list,list裡面是字典,key名指定為"name","value"。
③一定要註意的是,如果你畫出來的圖沒有數據或者沒有顯示,檢查是不是讀excel數據中出現瞭問題,即上述代碼中int的位置。
用於繪制treemap的數據結構如下所示:
四、圖像繪制
tm = ( TreeMap() .add("關註類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('./繪圖結果/矩形樹圖-例一.html')
position—指定label,即我們的name的位置,inside會居中顯示。如果不加,默認top,在每個矩形上方顯示。
結果如下所示:
由上圖可知,廣東省、浙江省和江蘇省在隨機數據中排名前三。受顯示區域的限制,數據較小或名字過長的矩形往往不能顯示完全,需要交互式放大其數值。
五、樹形結構
在加入樹形結構後,我們需要在代碼中相應增加key為“children"的數據
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['關註類A'][i]) for i in range(len(province_type1))] for i in range(len(province_type1)): dic = {} dic["value"],dic["name"] = int(province_type1['關註類A'][i]),name[i] if math.isnan(province_type1['關註類A-1'][i]) ==0: dic["children"] = [ {"name":province_type1['省份'][i]+"A-1:"+str(province_type1['關註類A-1'][i]),"value":int(province_type1['關註類A-1'][i])}, {"name":province_type1['省份'][i]+"A-2:"+str(province_type1['關註類A-1'][i]),"value":int(province_type1['關註類A-2'][i])} ] if math.isnan(province_type1['關註類A1-1'][i]) ==0: dic["children"][0]["children"] = [ {"name":"A1-1:"+str(province_type1['關註類A1-1'][i]),"value":int(province_type1['關註類A1-1'][i])}, {"name":"A1-2:"+str(province_type1['關註類A1-1'][i]),"value":int(province_type1['關註類A1-2'][i])} ] tree.append(dic) tm = ( TreeMap() .add("關註類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('./繪圖結果/矩形樹圖-例二.html')
如果沒有枝葉的類,則不需要在"name""value"平級上加"children",如果枝葉中有兩個以上類別,相當於是一個新的樹,需要增加“children”,結構和樹形一致,如下所示:
【“name”:“父節點”,
"value": number,
"children":【{“name”:“子節點一”,“value”:number},
{“name”:“子節點二”,“value”:number},
{“name”:“子節點三”,“value”:number}
】
】
子序列在顯示區域允許的情況下,可以繼續按上述結構增加。
繪制結果如下所示:
從上圖我們可以看到,盡管我們為父類命名,但顯示的結果隻有最小類的名稱和數值。
pyecharts圖像交互性較強,可以通過點擊不斷聚焦類,放大圖像,但由於不知道怎麼呈現給大傢,還是鼓勵大傢自己動手操作去探索叭~
總結
到此這篇關於python用pyecharts畫矩形樹圖實例的文章就介紹到這瞭,更多相關python pyecharts畫矩形樹圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 利用pyecharts繪制地理散點圖
- Python Pyecharts繪制桑基圖分析用戶行為路徑
- python用pyecharts實現地圖數據可視化
- Python機器學習之使用Pyecharts制作可視化大屏
- Python pyecharts實時畫圖自定義可視化經緯度熱力圖