python用pyecharts画矩形树图实例
作者:林老头ss 发布时间:2022-12-20 21:42:04
一、概念介绍
矩形树图(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图像交互性较强,可以通过点击不断聚焦类,放大图像,但由于不知道怎么呈现给大家,还是鼓励大家自己动手操作去探索叭~
来源:https://blog.csdn.net/qq_45400322/article/details/122560489
猜你喜欢
- import socketdef open_tcp_socket(remotehost,servicename): &
- 概要在调用第三方 API 的时候, 基本都有访问限速的限制条件. 第三方的 API 有多个的时候, 就不太好控制访问速度, 常常会导致 HT
- 简介你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。本书分为五个部分循序渐进地与读者讨论了JavaSc
- 问题描述尝试用Python写一个Wordcloud的时候,出现了编码问题。照着网上某些博客的说法添添改改后,结果是变成了“UnicodeDe
- element-ui中el-form自定义验证需求在输入项目名称后,调用后端接口isNameOnly,若已存在,则效果如下图:1.先设置校验
- 很多次遇到在pycharm中无法安装第三方库的情况,今天我就遇到了,找了很多办法都没用但是在pycharm中配置anaconda环境之后再从
- 本站收集的js实现的同步动态显示当前日期,时间和星期几的代码,我经常用在自己做的企业网站的后台,方便嘛。效果可以看看本站的首页,呵呵!而且代
- 一、JSON.stringify介绍JSON.stringify() 方法将一个 JavaScript 对象或值转换为
- 一、功能简述正是微博如火如荼的时节,其中各个微博的分享功能是网站推广产品的好东东啊,此时如何方便快捷的使用微博的分享功能就显得比较重要了。我
- 本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限SQL Server 中 SQL
- 在《javascript设计模式》中对这种方法作了比较详细的描述,实现方法的链式调用,只须让在原型中定义的方法都返回调用这些方法的实例对象的
- 在进行WEB标准网页设计时,必不可少的是写入大量的CSS语法,一般情况下我们可以通过Dreamweaver软件的“CSS样式”面板自动生成相
- 这里就简单介绍两种: 一、增加超时的时间限制 这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_g
- 一、简介主流被使用的地理坐标系并不统一,常用的有WGS84、GCJ02(火星坐标系)、BD09(百度坐标系)以及百度地图中保存矢量信息的we
- 由于学习需要安装matplotlib库,阅读网上教程后一直出现各种各样的错误,以下为我的经验总结:声明:本人python版本为3.8.0,p
- 一、元素偏移量 offset 系列offset 翻译过来就是偏移量, 我们使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)
- 在Python中os模块里,os.renames() 方法用于递归重命名目录或文件。类似rename()。rename()方法语法格式如下:
- 制作友好的模板Context你也许已经注意到范例中的出版商列表模板在变量 object_list 里保存所有的书籍。这个方法工作的很好,只是
- 实验结论如果需要在循环结束后获得结果,推荐列表解析;如果不需要结果,直接使用for循环, 列表解析可以备选;除了追求代码优雅和特定规定情境,
- 今天群里有人问了个问题是这样的: 然后有群友是这样回答的 select name,sum(case when stype=4 t