Python 中的柏青哥人物关系图

小说 柏青哥您可能想一目了然地看到人物之间的复杂关系。跨代人物之间的关系会让小说更有趣,但也可能很复杂,难以理解。 Python 可以轻松地将这些柏青哥表关系可视化并加以理解。

在本文中,我们将使用 Python 中的柏青哥人物关系图一步一步来,逐一分解代码的关键部分。在文章的最后,你会发现整个代码都集中在一起,所以请务必通读全文!

파친코 인물 관계도 포스트 그림

柏青哥》小说概述

小说 柏青哥这部史诗般的小说讲述了从日本殖民时期到 20 世纪 80 年代韩国和日本的一个移民家庭四代人的故事。主要人物之间的复杂关系与那个时代的冲突交织在一起,理解它们之间的联系对于欣赏这部小说至关重要。 苹果原创柏青哥).

描述关键人物

  • 洪义禅师:禅师的父亲,代表家族的第一代。
  • 杨进她是 Sun-ja 的母亲和 Hoon-i 的妻子,是一位尽职尽责的母亲。
  • 禅宗小说的主人公,在困难面前为家人做出牺牲。
  • Hansu Koh他是日本一位成功的商人,是禅师的初恋情人,也是小说冲突的主要根源。
  • 巴基萨克他是她的丈夫,一位牧师,他们正在一起建设新生活。
  • 帽子数量他是 Sunza 和 Baek Isaac 的儿子,也是其家族在日本经营弹珠机业务的第三代传人。
  • 诺亚他是宣子和高汉秀的儿子,一直在为自己的身份而挣扎。
  • 所罗门他是族长的儿子,代表第四代,在日本和美国之间过着复杂的生活。
  • 悦子一个日本女人,她是墨祖的情人,有着复杂的家族史。
  • 一种:悦子的女儿,与所罗门有感情纠葛。
  • 由美:所罗门的情人,他与所罗门的关系使故事更加复杂。
  • 庆熙雅各布的妻子,雅各布的兄弟,雅各布家族的另一位重要人物。
  • Changsoo KimHansoo Goh 的忠实下属,是他的主要助手。

现在,让我们用 Python 来直观地描述这些字符之间的关系。

Python 中的柏青哥人物关系图

1. 安装所需软件包并设置韩文字体

首先,您需要安装必要的软件包并设置韩文字体,这将确保关系图中的韩文字符不会断开。

import networkx as nx
import matplotlib.pyplot as plt
from adjustText import adjust_text
import matplotlib.font_manager as fm

设置 # 韩文字体
font_path = 'C:/Windows/Fonts/NanumGothic.ttf' # 需要检查实际字体路径
fontprop = fm.FontProperties(fname=font_path, size=12)

plt.rc('font', family=fontprop.get_name())

matplotlib 库用于将图形可视化、 调整文本是一个防止文本重叠的软件包。字体路径应设置为实际安装的字体路径,本例中为 NanumGothic。

定义人际关系并设置节点

定义 Pachinko 中主要人物之间的关系,建立图中的节点(人物)和边(关系线)。

创建 # 图形
G = nx.Graph()

定义 # 字符关系(设置字符之间的关系)
人物 = [
    ("Hoon Yi","禅师","父女")、
    (杨瑾","禅师","母女")、
    ("Baek Isaac","Mohasu","富人")、
    ("Goh Hansu","诺亚","富人")、
    (禅师"、"爱人")、
    (禅师"、"帽子"、"帽子")、
    ("帽子","诺亚","兄弟")、
    (帽子"、"所罗门"、"富人")、
    ("所罗门"、"由美"、"爱人")、
    (悦子"、"鸠"、"爱人")、
    ("悦子"、"花"、"母女"),
    ("诺亚"、"秋子"、"爱人"),
    ("所罗门"、"一"、"爱人"),
    ("白-约瑟夫"、"京姬"、"情侣")、
    (白约瑟夫"、"白以撒"、"兄弟")、
    (高汉洙"、"金昌洙"、"朱钟")。
]

# 添加字符和关系行
for characters1, character2, relation in characters:
    G.add_edge(character1, character2, relation=relation)

该代码被称为 网络x 图书馆将人与人之间的关系作为节点和边连接起来。例如 (《洪崖》、《禅师》、《父女》)代表了勋和孙子之间的父女关系。

3. 设置世代颜色和布局

现在将这些字符分成几代,并根据它们的辈分给它们上色。

# 世代信息定义
generation_dict = {
    "Hunyi":"第一代"、
    "Yangjin":"第 1 代"、
    宣子"第二代"
    "白以撒""第二代"
    "帽子的数量""第三代"
    诺亚"第三代"
    "悟饭":"第二代"
    "所罗门"第四代
    "由美""第三代
    悦子"第三代"
    "花""第四代
    秋子"第三代
    "白约瑟夫""第二代"
    "京熙""第二代"
    "Changsoo Kim":"其他"
}

根据 # 代设置颜色
color_map = {
    "第一代":"浅蓝色
    "第二代"浅绿色
    "第三代"浅花色
    "第四代"浅粉色
    其他灰色
}

# 为每个节点指定特定世代的颜色
node_colours = [color_map[generation_dict[node]]] 为 Node in G.nodes()for node in G.nodes()]

# 设置布局(使用 spring_layout 均衡布局)
pos = nx.spring_layout(G)

上面的代码是按照每个人的世代来着色的。例如,第一代人的颜色是 浅蓝色第二代是 浅绿第一次。 弹簧布局有助于确保以平衡的方式放置节点。

4. 绘制图形关系图

现在,我们将实际绘制图形,添加节点和边(关系线)以及关系描述。

绘制 # 图形
plt.figure(figsize=(12, 8))

绘制 # 节点
nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)

绘制 # 关系线
nx.draw_networkx_edges(G, pos)

在 # 关系线之上添加关系描述
edge_labels = nx.get_edge_attributes(G, 'relation')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)

在 # 节点上显示人名
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())

# 添加标题
plt.title("Pachinko 的主要人物关系图", size=20, fontweight='bold')

# 添加图例
import matplotlib.lines as mlines
legend_elements = [mlines.Line2D([], [], color=colour, marker='o', linestyle='', markersize=10, label=gen)
                   for gen, color in color_map.items()] [plt.legend(handles='')
plt.legend(handles=legend_elements, title="Generation", loc="lower center", bbox_too_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)

输出 # 图形
plt.axis('off')
plt.tight_layout()
plt.show()

上面的代码会在图表中显示每个人的世代颜色、姓名和关系描述。 draw_networkx_nodes, draw_networkx_edges, draw_networkx_labels分别添加节点、关系线和人名,并使用 draw_networkx_edge_labels在关系描述中。

完整代码

import networkx as nx
import matplotlib.pyplot as plt
from adjustText import adjust_text
import matplotlib.font_manager as fm

设置 # 韩文字体
font_path = 'C:/Windows/Fonts/NanumGothic.ttf' 字体路径
fontprop = fm.FontProperties(fname=font_path, size=12)

plt.rc('font', family=fontprop.get_name())

创建 # 图形
G = nx.Graph()

定义 # 字符关系
字符 = [
    ("弘一"、"禅师"、"父女")、
    ("Yang Jin","禅师","母女"),、
    (白以撒"、"婆婆"、"父亲"、"母亲"、"女儿")。

자"),
    ("吴汉苏"、"诺亚"、"富人")、
    (禅师"、"情人")、("禅师"、"情人")、
    (禅师"、"帽子"、"帽子")、
    ("帽子","诺亚","兄弟")、
    (帽子"、"所罗门"、"富人")、
    ("所罗门"、"由美"、"爱人")、
    (悦子"、"鸠"、"爱人")、
    ("悦子"、"花"、"母女"),
    ("诺亚"、"秋子"、"爱人"),
    ("所罗门"、"一"、"爱人"),
    ("白-约瑟夫"、"京姬"、"情侣")、
    (白约瑟夫"、"白以撒"、"兄弟")、
    (高汉洙"、"金昌洙"、"朱钟")。
]

# 添加字符和关系行
for characters1, character2, relation in characters:
    G.add_edge(character1, character2, relation=relation)

定义 # 生成信息
generation_dict = {
    "洪义":"第 1 代"、
    "Yangjin":"第 1 代"、
    宣子"第二代"
    "白以撒""第二代"
    "帽子的数量""第三代"
    诺亚"第三代"
    "悟饭":"第二代"
    "所罗门"第四代
    "由美""第三代
    悦子"第三代"
    "花""第四代
    秋子"第三代
    "白约瑟夫""第二代"
    "京熙""第二代"
    "Changsoo Kim":"其他"
}

根据 # 代设置颜色
color_map = {
    "第一代":"浅蓝色
    "第二代"浅绿色
    "第三代"浅花色
    "第四代"浅粉色
    其他灰色
}

# 为每个节点指定特定世代的颜色
node_colours = [color_map[generation_dict[node]]] 为 Node in G.nodes()for node in G.nodes()]

设置 # 布局
pos = nx.spring_layout(G)

绘制 # 图形
plt.figure(figsize=(12, 8))

绘制 # 节点
nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)

绘制 # 关系线
nx.draw_networkx_edges(G, pos)

在 # 关系线之上添加关系描述
edge_labels = nx.get_edge_attributes(G, 'relation')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)

在 # 节点上显示人名
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())

# 添加标题
plt.title("Pachinko 的主要人物关系图", size=20, fontweight='bold')

# 添加图例
import matplotlib.lines as mlines
legend_elements = [mlines.Line2D([], [], color=colour, marker='o', linestyle='', markersize=10, label=gen)
                   for gen, color in color_map.items()] [plt.legend(handles='')
plt.legend(handles=legend_elements, title="Generation", loc="lower center", bbox_too_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)

输出 # 图形
plt.axis('off')
plt.tight_layout()
plt.show()

总结

在本文中,我们学习了如何使用 Python 来可视化 Pachinko 中的人物关系。 用图形表示复杂的人物关系可以更容易地理解小说的流程。利用 Python 强大的数据可视化功能,您就能对复杂的叙事结构一目了然。 安装 VS CODE - Windows 这篇文章会帮你上路,加油吧!

类似文章