python生成树形图_如何使用Python生成树形图(treemap)所需数据

本文介绍了如何使用Python生成树形图数据,特别是处理多级数据的情况。通过一个名为`Tree`的Autovivification类,将数据转化为适合生成树形图的结构。示例数据和生成的`data`结果展示了如何自动汇总各级别数据的值。最后提到,利用这些数据构建Echarts的选项并不复杂。
摘要由CSDN通过智能技术生成

被这个问题稍微难住了下,找到答案后不敢独享,希望能帮助其他朋友吧。

raw_data = [

("A1", "B1", "C1", 1),

("A1", "B1", "C1", 1),

("A1", "B1", "C2", 1),

("A1", "B2", "C1", 1),

("A1", "B2", "C1", 1),

("A1", "B2", "C2", 1),

("A1", "B2", "C2", 1),

("A2", "B1", "C1", 1),

("A2", "B1", "C1", 1),

("A2", "B1", "C2", 1),

("A2", "B1", "C2", 1),

("A2", "B2", "C1", 1),

("A2", "B2", "C1", 1),

("A2", "B2", "C2", 1),

("A2", "B2", "C2", 1)

]

那么我们可以使用以下代码生成树形图中所需的data数据

# Autovivification

# https://en.wikipedia.org/wiki/Autovivification

class Tree(dict):

def __missing__(self, key):

value = self[key] = type(self)()

return value

tree = Tree()

for x, y, z, value in raw_data:

tree[x][y][z] = value

def walk_tree(tree):

for k, v in tree.items():

if isinstance(v, dict):

value_list = list(walk_tree(v))

result = {

"name": k,

"children": [x for x in value_list],

"value": sum([x['value'] for x in value_list])

}

yield result

else:

yield {"name": k, "value": float(v)}

data = [x for x in walk_tree(tree)]

结果如下,其中父级数据值会自动汇总

[{'children': [{'children': [{'value': 1.0, 'name': 'C1'}, {'value': 1.0, 'name': 'C2'}], 'value': 2.0, 'name': 'B2'}, {'children': [{'value': 1.0, 'name': 'C1'}, {'value': 1.0, 'name': 'C2'}], 'value': 2.0, 'name': 'B1'}], 'value': 4.0, 'name': 'A1'}, {'children': [{'children': [{'value': 1.0, 'name': 'C1'}, {'value': 1.0, 'name': 'C2'}], 'value': 2.0, 'name': 'B2'}, {'children': [{'value': 1.0, 'name': 'C1'}, {'value': 1.0, 'name': 'C2'}], 'value': 2.0, 'name': 'B1'}], 'value': 4.0, 'name': 'A2'}]

有了data数据后,在拼一个echarts的option就不是难事了,代码就不贴了。

总结:Autovivification这个单词是解决问题的钥匙。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值