218 lines
8.8 KiB
Python
218 lines
8.8 KiB
Python
from graphviz import Digraph
|
|
|
|
"""
|
|
绘制家族树
|
|
"""
|
|
|
|
# 创建有向图
|
|
dot = Digraph(comment='家族树', node_attr={'fontname': 'WenQuanYi Zen Hei'},
|
|
edge_attr={'fontname': 'WenQuanYi Zen Hei'})
|
|
dot.attr(rankdir='TB', dpi='300')
|
|
|
|
# 重名
|
|
dot.node('1', "发昌")
|
|
dot.node('2', "发昌")
|
|
dot.node('3', "长松")
|
|
dot.node('4', "长松")
|
|
|
|
# 女性人物
|
|
female_nodes = ["德萍", "长香", "发双", "发娜", "发雅", "发桢", "发雯", "发莲", "发花", "发宇", "发洵", "其晞", "其园",
|
|
"其楠", "其晴", "其菲","长婷","长欢","长娟","长怡","发兰"]
|
|
|
|
# 定义父子关系
|
|
parent_child_relations = [
|
|
('可观', '光友'),
|
|
('光友', '世法'),
|
|
('世法', '道胜'), ('世法', '道启'), ('世法', '道佑'),
|
|
('道佑', '尚铎'), ('道佑', '尚助'), ('道佑', '尚达'), ('道佑', '尚朝'), ('道佑', '尚国'),
|
|
('尚铎', '士进'), ('尚铎', '士忠'), ('尚铎', '士富'),
|
|
('尚助', '士元'), ('尚助', '士怀'), ('尚助', '士纲'), ('尚助', '士位'), ('尚助', '士恺'),
|
|
('尚达', '士贵'),
|
|
('尚朝', '士恭'),
|
|
('尚国', '士宽'), ('尚国', '士信'), ('尚国', '士敏'), ('尚国', '士惠'),
|
|
('士进', '邦龙'), ('士进', '邦乐'),
|
|
('士忠', '邦志'), ('士忠', '邦正'),
|
|
('士富', '邦秀'),
|
|
('士怀', '邦朝'), ('士怀', '邦田'), ('士怀', '邦奇'), ('士怀', '邦学'), ('士怀', '邦强'),
|
|
('士纲', '邦彦'), ('士纲', '邦清'),
|
|
('士位', '邦宗'),
|
|
('士贵', '邦国'), ('士贵', '邦胜'),
|
|
('士恭', '邦应'), ('士恭', '邦全'),
|
|
('士信', '邦和'), ('士信', '邦云'),
|
|
('士敏', '邦元'),
|
|
('士惠', '邦霖'),
|
|
('邦乐', '载万'), ('邦乐', '载有'), ('邦乐', '载彦'),
|
|
('邦秀', '载禄'), ('邦秀', '载厚'), ('邦秀', '载元'),
|
|
('邦田', '载祥'), ('邦田', '载春'),
|
|
('邦彦', '载阳'),
|
|
('邦国', '载兴'), ('邦国', '载清'), ('邦国', '载荣'), ('邦国', '载祜'),
|
|
('邦胜', '载赓'), ('邦胜', '载歌'),
|
|
('邦应', '载福'), ('邦应', '载寿'), ('邦应', '载恩'),
|
|
('邦全', '载仁'),
|
|
('邦和', '载道'), ('邦和', '载富'),
|
|
('邦元', '载德'), ('邦元', '载义'), ('邦元', '载礼'),
|
|
('邦霖', '载让'), ('邦霖', '载成'), ('邦霖', '载宝'),
|
|
('载彦', '元年'), ('载彦', '元春'), ('载彦', '元长'),
|
|
('载阳', '元泰'), ('载阳', '元唱'), ('载阳', '元庆'), ('载阳', '元魁'), ('载阳', '元丰'),
|
|
('载清', '元炳'), ('载清', '元济'), ('载清', '元勋'), ('载清', '元功'), ('载清', '元修'),
|
|
('载荣', '元鼎'),
|
|
('载荣', '元钟'),
|
|
('载荣', '元彛'),
|
|
('载荣', '元琛'),
|
|
('载祜', '元抡'), ('载祜', '元会'), ('载祜', '元松'),
|
|
('载赓', '元良'),
|
|
('载歌', '元恺'), ('载歌', '元选'), ('载歌', '元举'), ('载歌', '元宪'),
|
|
('载福', '元臣'), ('载福', '元定'), ('载福', '元顺'),
|
|
('载恩', '元凤'), ('载恩', '元龙'),
|
|
('载仁', '元勤'), ('载仁', '元俭'), ('载仁', '元学'),
|
|
('载道', '元端'), ('载道', '元章'),
|
|
('载让', '元甫'),
|
|
('元春', '善全'),
|
|
('元唱', '善怀'), ('元唱', '善元'),
|
|
('元庆', '善良'), ('元庆', '善和'),
|
|
('元丰', '善琪'),
|
|
('元炳', '善辅'), ('元炳', '善举'), ('元炳', '善传'), ('元炳', '善富'),
|
|
('元勋', '善宏'),
|
|
('元修', '善行'), ('元修', '善言'),
|
|
('元抡', '善彰'), ('元抡', '善扬'),
|
|
('元会', '善藏'), ('元会', '善身'), ('元会', '善维'), ('元会', '善宝'),
|
|
('元良', '善述'),
|
|
('元恺', '善荫'),
|
|
('元举', '善炽'), ('元举', '善祯'), ('元举', '善进'), ('元举', '善从'), ('元举', '善持'),
|
|
('元臣', '善道'), ('元臣', '善为'), ('元臣', '善庆'), ('元臣', '善保'), ('元臣', '善守'),
|
|
('元学', '善祥'), ('元学', '善士'),
|
|
('善全', '德昌'),
|
|
('善怀', '德大'), ('善怀', '德恒'),
|
|
('善元', '德安'), ('善元', '德溥'),
|
|
('善良', '德太'), ('善良', '德定'), ('善良', '德友'), ('善良', '德仁'),
|
|
('善和', '德文'), ('善和', '德武'),
|
|
('善琪', '德金'), ('善琪', '德艳'), ('善琪', '德映'),
|
|
('善辅', '德远'), ('善辅', '德麟'),
|
|
('善传', '德长'),
|
|
('善富', '德兴'), ('善富', '德海'), ('善富', '德怀'), ('善富', '德周'), ('善富', '德齐'),
|
|
('善宏', '德政'),
|
|
('善行', '德明'), ('善行', '德辅'),
|
|
('善言', '德庆'), ('善言', '德广'), ('善言', '德林'),
|
|
('善扬', '德敬'), ('善扬', '德钰'),
|
|
('善身', '德备'), ('善身', '德胜'),
|
|
('善维', '德峰'), ('善维', '德萍'),
|
|
('善宝', '德忠'), ('善宝', '德成'),
|
|
('善述', '德聘'), ('善述', '德炎'), ('善述', '德种'),
|
|
('善进', '德元'), ('善进', '德利'),
|
|
('善持', '德福'), ('善持', '德泳'),
|
|
('德昌', '长辉'), ('德昌', '长怡'),
|
|
('德安', '长江'), ('德安', '长恩'), ('德安', '长有'),
|
|
('德定', '长泳'),
|
|
('德仁', '长明'), ('德仁', '长伦'),
|
|
('德文', '长元'), ('德文', '长绵'), ('德文', '长新'), ('德文', '长生'),
|
|
('德艳', '长益'),
|
|
('德映', '长威'), ('德映', '长翔'),
|
|
('德远', '3'), ('德远', '长青'), ('德远', '长学'),
|
|
('德兴', '长存'), ('德兴', '长友'), ('德兴', '长胜'),
|
|
('德海', '长文'), ('德海', '长峰'),
|
|
('德庆', '长润'), ('德庆', '长柏'),
|
|
('德广', '长华'), ('德广', '长国'),
|
|
('德林', '长旺'), ('德林', '长平'),
|
|
('德敬', '4'), ('德敬', '长征'),
|
|
('德胜', '长宏'), ('德胜', '长香'),
|
|
('德峰', '长婷'),
|
|
('德萍', '长伟'),
|
|
('德忠', '长磊'), ('德忠', '长欢'),
|
|
('德成', '长乐'), ('德成', '长娟'),
|
|
('德炎', '长福'), ('德炎', '长贵'), ('德炎', '长安'), ('德炎', '长寿'),
|
|
('德种', '长林'),
|
|
('德元', '长刚'), ('德元', '长龙'),
|
|
('长江', '发双'),
|
|
('长有', '发逸'), ('长有', '发娜'),
|
|
('长泳', '发瑞'), ('长泳', '发雅'),
|
|
('长明', '发东'),
|
|
('长绵', '发旺'), ('长绵', '发辉'),
|
|
('长新', '发洋'),
|
|
('长生', '发桢'),
|
|
('长威', '发雯'),
|
|
('长青', '发良'), ('长青', '发莲'),
|
|
('长友', '发家'), ('长友', '发花'),
|
|
('长胜', '发传'), ('长胜', '发涛'),
|
|
('长润', '发翔'),
|
|
('长柏', '发波'),
|
|
('长华', '发松'),
|
|
('长旺', '1'),
|
|
('长平', '发鹏'), ('长平', '发磊'),
|
|
('长香', '2'), ('长香', '发广'), ('长香', '发宇'),
|
|
('长伟', '发洵'),
|
|
('长福', '发启'), ('长福', '发明'),
|
|
('长贵', '发文'), ('长贵', '发祥'),
|
|
('长寿', '发平'),
|
|
('长林', '发義'), ('长林', '发兰'),
|
|
('发良', '其非'), ('发良', '其凡'),
|
|
('发翔', '其晞'),
|
|
('发文', '其旺'), ('发文', '其园'),
|
|
('发祥', '其达'), ('发祥', '其楠'),
|
|
('发平', '其红'), ('发平', '其晴'), ('发平', '其菲'),
|
|
('发義', '其昊')
|
|
]
|
|
|
|
# 定义过继关系
|
|
adoption_relations = [
|
|
('士宽', '邦云'),
|
|
('邦朝', '载祥'),
|
|
('邦奇', '载祥'),
|
|
('邦学', '载春'),
|
|
('邦强', '载春'),
|
|
('邦清', '载阳'),
|
|
('邦宗', '载阳'),
|
|
('邦宗', '元魁'),
|
|
('邦清', '元庆'),
|
|
('邦云', '载富'),
|
|
('载有', '元俭'),
|
|
('载禄', '元俭'),
|
|
('载元', '元俭'),
|
|
('载祥', '元丰'),
|
|
('载春', '元丰'),
|
|
('载兴', '元济'),
|
|
('载富', '元章'),
|
|
('元俭', '善和'),
|
|
('元济', '善传'),
|
|
('元鼎', '善言'),
|
|
('元钟', '善言'),
|
|
('元宪', '善祯'),
|
|
('元顺', '善为'),
|
|
('元松', '善宝'),
|
|
('善举', '德兴'),
|
|
('善彰', '德敬'),
|
|
('善荫', '德种'),
|
|
('德武', '长新'),
|
|
('德政', '长青'),
|
|
('德齐', '长胜')
|
|
]
|
|
|
|
# 添加节点和父子关系边
|
|
# for parent, child in parent_child_relations:
|
|
# dot.node(parent)
|
|
# dot.node(child)
|
|
# dot.edge(parent, child)
|
|
|
|
# 添加节点和父子关系边
|
|
for parent, child in parent_child_relations:
|
|
if parent in female_nodes:
|
|
dot.node(parent, shape='ellipse', style='filled', color='pink')
|
|
else:
|
|
dot.node(parent, shape='box', style='filled', color='lightblue')
|
|
|
|
if child in female_nodes:
|
|
dot.node(child, shape='ellipse', style='filled', color='pink')
|
|
else:
|
|
dot.node(child, shape='box', style='filled', color='lightblue')
|
|
|
|
dot.edge(parent, child)
|
|
|
|
# 添加过继关系边
|
|
for adoptive_parent, adoptee in adoption_relations:
|
|
dot.node(adoptive_parent)
|
|
# dot.node(adoptee)
|
|
dot.node(adoptee, shape='diamond', style='filled', color='lightgreen')
|
|
dot.edge(adoptive_parent, adoptee, style='dashed', label='继', color="blue")
|
|
|
|
# 渲染图形
|
|
dot.render('family_tree.gv', view=True)
|