Python实现股权结构图自动生成

有的时候我们需要对公司的股权结构图进行透视,如果手动绘制的画有些太麻烦,当然手动绘制的一定很好看,但是如果只是需要一个示意图的话,利用Python实现就可以了

简单效果图

只是一个示意图,具体细节大家可以自行调节
在这里插入图片描述

源码

# -*- coding: utf-8 -*-
from graphviz import Digraph

L=[
    [1, '共青城民生信保成长股权投资合伙企业(有限合伙)', 1, 'B1公司', 2, '70.00%'],
    [2, 'A公司', 1, 'B2公司', 2, '50.00%'],
    [3, 'A公司', 1, 'B3公司', 2, '40.00%'],
    [4, 'B1公司', 2, 'C1公司', 3, '10.00%'],
    [5, 'B1公司', 2, 'C2公司', 3, '20.00%'],
    [6, 'B1公司', 2, 'C3公司', 3, '30.00%'],
    [7, 'B2公司', 2, 'C3公司', 3, '40.00%'],
    [8, 'B2公司', 2, 'C4公司', 3, '35.00%'],
    [9, 'B3公司', 2, 'C4公司', 3, '20.00%'],
    [10, 'B3公司', 2, 'C5公司', 3, '30.00%'],
    [11, 'C4公司', 3, 'C5公司', 3, '30.00%'],
    [12, 'C5公司', 3, 'B1公司', 2, '10.00%']
]
father_name_list=[]
child_name_list=[]
equity_portion_list=[]
dic={}

for i1 in range(len(L)):
    M=L[i1]
    father_name=M[1]
    father_name_list.append(M[1])
    father_layer=M[2]
    child_name=M[3]
    child_name_list.append(M[3])
    child_layer=M[4]
    equity_portion=M[5]
    equity_portion_list.append(M[5])
    for x in father_name:
        dic[father_name]=father_layer   #生成父单位名称和对应的层级(用字典考虑去重)
    for y in child_name:
        dic[child_name]=child_layer     #将子单位名称和对应的层级也添加到字典中

name_layer_list = sorted(dic.items(), key=lambda x: x[1]) #字典进行排序(从小到大)

u=[]
for z in name_layer_list:
    company_name=z[0]
    layer=z[1]
    u.append(z[1])
number_of_layers=max(u) #计算层数

#按各公司的层数生产分层的节点:
g=Digraph(name='复杂股权结构图')

for key in dic:
    for n in range(number_of_layers+1):
        if dic[key]==n:
            with g.subgraph() as layer_n:
                layer_n.attr(rank='same')
                layer_n.node(name=key,color='blue',shape='box',fontname='Microsoft YaHei')

#生产各节点间的连线:
for i2 in range(len(L)):
    g.edge(father_name_list[i2],child_name_list[i2],label=equity_portion_list[i2],color='red',fontname='Microsoft Yahei')

g.view()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八与她

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值