一文速学Python+Pyecharts绘制树形图
作者:fanstuck 发布时间:2023-07-28 12:05:27
前言
之前写pandas和matplotlib的时候说到了想要出一期Pyechart系列数据可视化的文章。比起matplotlib,pyeacharts的图表要丰富而且好看,这取决于它是基于百度团队使用Javascript开发的商业级数据图表。而且pyechart文档全,便于开发和阅读文档,熟练掌握后是一种非常好用的数据可视化的工具之一。当然相比pandas的plot代码会繁琐一些,其中一些操作类方法也是比较复杂的,需要对其有个大概的掌握才能作出满意的图表。
在我之前的文章中也有好几次使用到了pyechart方法,但是我觉得既然是完成一些数据可视化的操作应该就要快速可呈现,作为数据处理能够得到解析出想要的数据就足够了,如果有个业务小组完全可以将这一部分交给前端去渲染就好了,主要还是快速出图表给我们自己看,用于调整代码而已。那么废话不多说了开始吧!
一、Tree树图
pyecharts只能说不愧是国人开发,文档真的给力,不用再去啃生肉那么痛苦了。很多详细的参数看开发文档就可以看明白:pyecharts - A Python Echarts Plotting Library built with love.
我们来看它给出的基础例图:
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")
)
此代码会生成一个网页:
看对应的前端源代码:
<!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="https://img.aspxhome.com/files/Hivesqlblood/tree_base.html"></iframe>
</div>
</body>
</html>
sandbox="allow-scripts"允许添加脚本执行,也就是将我们编写的python转换为了js脚本,通过代码输入端口获取echart的配置:
如果不想生成网页将render("tree_base.html")改为render_notebook()即可。
树形图有很多种使用场景,比如事件的从属关系,
这里更主要的是数据处理板块,如果我们仅想要将一行列表数据转换为树形图数据结构该如何处理。
二、数据处理
我们拿到展示数据结构为:
[ { "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",
}
]
也就是结构为 [{"children":[{"name": "B"},{"name": "B"}] ,"name": "temp"}]的类型,我们需要将将数据转换为这个格式数据,就以通用的list来说,如果用树图来表示的话肯定是有一节点为根节点,一部分节点为子节点。就以一个list来说:
list_1=['temp_road_check_20220902', 'dws_crowdsourcing_cs_order_link_mysql', 'track_point_traffic_dev_tk_track_traffic_info_offline']
第一个节点为根节点,其余为子节点。那么我们就可以进行这样分装:
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]
这样的话就可以形成树形图的格式了:
画图也就为:
最好肯定是使用常态化的思维去封装这个方法,通过数据结构调整方法。
来源:https://juejin.cn/post/7158018878327996447


猜你喜欢
- 1.直方图# -*-coding:utf-8 -*-# @Time : 21:02# @Author: 黄荣津# @File :
- 效果图如下所示: 前言嗨,说起探探想必各位程序汪都不陌生(毕竟妹子很多),能在上面丝滑的翻牌子,探探的的堆叠滑动组件起到了关键的作
- 一、创建mysql数据库1.创建数据库语法--创建名称为“testdb”数据库,并设定编码集为utf8CREATE DATABASE IF
- 目的: 找出路径坐在的所有python文件(.py结尾),返回列表。代码:def list_py(path = None): if path
- 原文地址第一次翻译文章,请各路人士多多指教!类型和接口因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍。go是一个静态性语言,每个
- 在现代LOGO设计当中,叶子的形状被视做好的创意。或者说,是一种变革的想法。在网页中他们大多被用于轻量级的解决方案、干净的不抽像的设计。在实
- 一、cache介绍由于Django是 * 站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使
- 我们把一个事物进行分解,就可以得到其中的元素。对于python中的解包来说,也是同样的使用,相信大家从名称就可以观察出来了。那么在具体的解包
- session请求过程当第一次访问网站时,Seesion_start()函数就会创建一个唯一的Session ID,并自动通过HTTP的响应
- 在一个文件的末尾追加数据是很常用的。在使用过程中应该都比较熟悉不会出现什么错误。但是往一个文件头部插入数据可能或多或少会碰到一些问题。看似正
- 如代码1所示: // 代码 1 // 外观层类 class LWordHomePage { // 添加留言 public function
- 1)用这个方法,把虚拟主机的默认页只设置成一个比如index.asp 在index.asp的最上面加入以下代码:<%if R
- 批处理可以很方便地和其它各种语言混合编程,除了好玩,还有相当的实用价值,比如windows版的ruby gem包管理器就是运用了批处理和ru
- 本文实例讲述了jQuery实现的简单分页。分享给大家供大家参考,具体如下:<!DOCTYPE html PUBLIC "-/
- 在使用matplotlib画图时,少不了对性能图形做出一些说明和补充。一般情况下,loc属性设置为'best'就足够应付了p
- 一、Tensor 之间的运算规则相同大小 Tensor 之间的任何算术运算都会将运算应用到元素级不同大小 Tensor(要求dimensio
- 下面通过图文并茂的方式展示如下:一、SQL Profiler 事件类 Stored Procedures\RPC:Complete
- 索引合并是mysql底层为我们提供的智能算法。了解索引合并的算法,有助于我们更好的创建索引。索引合并是通过多个range类型的扫描并且合并它
- GetRef 函数 返回一个指向一过程的引用,此过程可绑定某事件。 Set object.eventname = GetRef(procna
- pytorch中尝试用多进程加载训练数据集,源码如下:trainloader = torch.utils.data.DataLoader(t