读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制相关的知识,希望对你有一定的参考价值。
读书笔记3|《群山回唱》-卡勒德胡赛尼
踉跄前行中,你总能在他们身上找到丢失的那一部分记忆。
一度看不下去这本书,因为最开始的章节里太痛了,加上我也离开我的孩子,生活已经够苦,我需要一点糖。这次实在太无聊了,又认真的翻开这本书,开始梳理记录人物关系及人名。因此我才能顺利的看完。
这篇博客将介绍如何使用python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱进行绘制。
不太完美的是没法把人物关系也标注上去。
1. 人物关系表
qshq.txt
阿卜杜拉,帕丽,妹妹
阿卜杜拉,苏丹娜,妻子
阿卜杜拉,小帕丽,女儿
阿卜杜拉,阿卜杜拉妈妈,妈妈
阿卜杜拉,萨布尔,爸爸
阿卜杜拉,帕尔瓦娜,继母
帕尔瓦娜,纳比,哥哥
帕尔瓦娜,马苏玛,双胞胎姐姐
马苏玛,纳比,哥哥
纳比,妮拉·瓦赫达提,女主人
阿卜杜拉,奥马尔,同父异母弟弟
阿卜杜拉,伊克巴尔,同父异母弟弟
伊克巴尔,吴拉姆,儿子
吴拉姆,帕尔瓦娜,奶奶
吴拉姆,阿卜杜拉,伯伯
帕尔瓦娜,奥马尔,大儿子
帕尔瓦娜,伊克巴尔,小儿子
帕丽,舒贾,帕丽的狗
阿卜杜拉,谢基卜毛拉,村里的长者
谢基卜毛拉,巴依吐拉,儿子
纳比,巴依吐拉,发小
巴依吐拉,穆特里卡,儿子满月宴卖艺人
纳比,苏莱曼·瓦赫达提,男主人
苏莱曼·瓦赫达提,扎西德,花艺员工
帕丽,帕尔瓦娜,继母
阿卜杜拉,纳比,舅舅
帕丽,纳比,舅舅
巴希里,苏莱曼·瓦赫达提,邻居
巴希里,巴希里·伊德里斯,儿子
巴希里哥哥,巴希里·铁木尔,儿子
伊德里斯,巴希里·铁木尔,堂弟
伊德里斯,娜希尔,妻子
伊德里斯,勒马尔,大儿子
伊德里斯,扎比,大儿子
纳比,马科斯·瓦尔瓦里斯,战乱后来的医生
马科斯,阿姆拉·阿德莫维奇小姐,朋友
阿姆拉·阿德莫维奇小姐,罗莎娜(罗诗),养女
罗莎娜(罗诗),马科斯,为罗莎娜(罗诗)整形的医生
娜希尔,辛西娅(普拉提瑜伽老师),健身房那儿的老师
伊德里斯,琼·谢弗,上司
妮拉·瓦赫达提,于连,情人
于连,克里斯蒂安,学生时代的朋友
于连,奥雷莉,学生时代的朋友
妮拉·瓦赫达提,德劳内大夫,医生
妮拉·瓦赫达提,艾蒂安·布斯图勒,采访记者
帕丽,科莱特,好友
妮拉·瓦赫达提母亲,阿涅丝,妹妹
帕丽,扎希娅,室友
扎希娅,萨米,未婚夫
帕丽,埃里克,老公
帕丽,伊莎贝尔,大女儿
伊莎贝尔,阿贝尔(掌勺厨师),老公
帕丽,阿兰,二儿子
阿兰,安娜,妻子
帕丽,蒂埃里,三儿子
科莱特,迪迪耶,老公
阿德尔,马拉拉伊,老师
阿德尔,巴巴江(指挥官),父亲
阿德尔,阿丽娅,母亲
巴巴江,卡比尔,保镖一
巴巴江,阿兹马赖,保镖二
阿丽娅,娜尔吉丝,姐姐
玛达丽娜,多利安,第一任丈夫
玛达丽娜·贾纳科斯,萨丽娅,女儿
多利安·贾纳科斯,萨丽娅·贾纳科斯,父亲
玛达丽娜,安德烈亚斯,第二任丈夫
玛达丽娜,埃利亚斯,情人
多利安,阿波罗(把5岁萨丽娅咬毁容了),狗
奥德丽娅·奥蒂,马科斯·瓦尔瓦里斯,儿子
奥德丽娅,玛达丽娜,朋友
马达丽娜,安德烈亚斯·贾纳科斯,老公
马科斯,加里,伙伴
马科斯,阿方索,伙伴
马科斯,詹娜,女友
小帕丽,埃克托尔·华雷斯,邻居
塞萨尔,埃克托尔·华雷斯,儿子
小帕丽,吉莱斯皮夫人,老师
小帕丽,杰里米·沃里克,同学
1. 效果图如下
字数太多,很乱,需要对标签进行自适应下:
标签自适应效果图如下:
添加node颜色及边缘颜色,效果图如下:
2. 优化
只尝试了最基本的绘制,还可以尝试以下示例:
-
还可以对主角进行标签颜色及大小区分:
-
节点发散
-
主角及关系线不同区分:
3. 源码
# python plot_qshc.py
# 对群山回唱人物关系图谱进行绘制
import sys
import matplotlib.pyplot as plt
import networkx as nx
print(sys.getdefaultencoding())
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
nodes = []
edegs = []
with open("qshc.txt", 'r', encoding='utf-8', errors='ignore') as f:
data = f.readlines()
print(data)
for i, line in enumerate(data):
print(i, line.replace("\\n", ""))
nodes.append(line.split(",")[0])
nodes.append(line.split(",")[1])
edegs.append((line.split(",")[0], line.split(",")[1]))
nodes = set(nodes)
print(nodes)
print(edegs)
original_graph = nx.DiGraph()
node_sizes = [2000 for node in nodes]
node_colors = ["red" for n in nodes]
original_graph.add_nodes_from(nodes)
original_graph.add_edges_from(edegs)
base_options = dict(with_labels=True, edgecolors="blue")
fig, ax = plt.subplots(figsize=(12, 12))
plt.title("群山回唱人物关系图 Original (%s edges)" % original_graph.number_of_edges())
nx.draw_networkx(original_graph, node_color=node_colors, **base_options)
# 缩放图表以保证标签可读
ax.margins(0.1, 0.05)
plt.tight_layout()
plt.show()
参考
-
https://networkx.org/documentation/latest/auto_examples/index.html
-
https://networkx.org/documentation/latest/auto_examples/algorithms/plot_dedensification.html
以上是关于读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制的主要内容,如果未能解决你的问题,请参考以下文章