zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

Python自动 实现 生成 股权 结构图
2023-09-11 14:20:29 时间

有的时候我们需要对公司的股权结构图进行透视,如果手动绘制的画有些太麻烦,当然手动绘制的一定很好看,但是如果只是需要一个示意图的话,利用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()