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