Python中用pyecharts怎样快速的画矩形树图
Admin 2022-09-06 群英技术资讯 755 次浏览
矩形树图(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图像交互性较强,可以通过点击不断聚焦类,放大图像,但由于不知道怎么呈现给大家,还是鼓励大家自己动手操作去探索叭~
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了python从gbff文件中直接提取cds序列示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
协程:英文名Coroutine,是单线程下的并发,又称微线程,纤程。协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。对比操作系统控制线程的切换,用户在单线程内控制协程的切换。协程自己本身无法实现并发(甚至性能会降低),协程+IO切换性能提高。
类类的概念在许多语言中出现,是面向对象编程的基础,很容易理解。抽象出不同物体的共同特征,根据相似性原则,把彼此相似的物体归于相同的
这篇文章主要为大家介绍了python网络编程之进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
这篇文章主要介绍了分别利用PyQT5和Tkinter实现电脑的定时关机小程序,文中的示例代码讲解详细,对我们学习Python有一定的帮助,快跟随小编一起学习一下吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008