读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制
创始人
2024-04-08 08:11:27
0

读书笔记3|《群山回唱》-卡勒德胡赛尼

在这里插入图片描述

踉跄前行中,你总能在他们身上找到丢失的那一部分记忆。

一度看不下去这本书,因为最开始的章节里太痛了,加上我也离开我的孩子,生活已经够苦,我需要一点糖。这次实在太无聊了,又认真的翻开这本书,开始梳理记录人物关系及人名。因此我才能顺利的看完。

这篇博客将介绍如何使用python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱进行绘制。
不太完美的是没法把人物关系也标注上去。

1. 人物关系表

qshq.txt

阿卜杜拉,帕丽,妹妹
阿卜杜拉,苏丹娜,妻子
阿卜杜拉,小帕丽,女儿
阿卜杜拉,阿卜杜拉妈妈,妈妈
阿卜杜拉,萨布尔,爸爸
阿卜杜拉,帕尔瓦娜,继母
帕尔瓦娜,纳比,哥哥
帕尔瓦娜,马苏玛,双胞胎姐姐
马苏玛,纳比,哥哥
纳比,妮拉·瓦赫达提,女主人
阿卜杜拉,奥马尔,同父异母弟弟
阿卜杜拉,伊克巴尔,同父异母弟弟
伊克巴尔,吴拉姆,儿子
吴拉姆,帕尔瓦娜,奶奶
吴拉姆,阿卜杜拉,伯伯
帕尔瓦娜,奥马尔,大儿子
帕尔瓦娜,伊克巴尔,小儿子
帕丽,舒贾,帕丽的狗
阿卜杜拉,谢基卜毛拉,村里的长者
谢基卜毛拉,巴依吐拉,儿子
纳比,巴依吐拉,发小
巴依吐拉,穆特里卡,儿子满月宴卖艺人
纳比,苏莱曼·瓦赫达提,男主人
苏莱曼·瓦赫达提,扎西德,花艺员工
帕丽,帕尔瓦娜,继母
阿卜杜拉,纳比,舅舅
帕丽,纳比,舅舅
巴希里,苏莱曼·瓦赫达提,邻居
巴希里,巴希里·伊德里斯,儿子
巴希里哥哥,巴希里·铁木尔,儿子
伊德里斯,巴希里·铁木尔,堂弟
伊德里斯,娜希尔,妻子
伊德里斯,勒马尔,大儿子
伊德里斯,扎比,大儿子
纳比,马科斯·瓦尔瓦里斯,战乱后来的医生
马科斯,阿姆拉·阿德莫维奇小姐,朋友
阿姆拉·阿德莫维奇小姐,罗莎娜(罗诗),养女
罗莎娜(罗诗),马科斯,为罗莎娜(罗诗)整形的医生
娜希尔,辛西娅(普拉提瑜伽老师),健身房那儿的老师
伊德里斯,琼·谢弗,上司
妮拉·瓦赫达提,于连,情人
于连,克里斯蒂安,学生时代的朋友
于连,奥雷莉,学生时代的朋友
妮拉·瓦赫达提,德劳内大夫,医生
妮拉·瓦赫达提,艾蒂安·布斯图勒,采访记者
帕丽,科莱特,好友
妮拉·瓦赫达提母亲,阿涅丝,妹妹
帕丽,扎希娅,室友
扎希娅,萨米,未婚夫
帕丽,埃里克,老公
帕丽,伊莎贝尔,大女儿
伊莎贝尔,阿贝尔(掌勺厨师),老公
帕丽,阿兰,二儿子
阿兰,安娜,妻子
帕丽,蒂埃里,三儿子
科莱特,迪迪耶,老公
阿德尔,马拉拉伊,老师
阿德尔,巴巴江(指挥官),父亲
阿德尔,阿丽娅,母亲
巴巴江,卡比尔,保镖一
巴巴江,阿兹马赖,保镖二
阿丽娅,娜尔吉丝,姐姐
玛达丽娜,多利安,第一任丈夫
玛达丽娜·贾纳科斯,萨丽娅,女儿
多利安·贾纳科斯,萨丽娅·贾纳科斯,父亲
玛达丽娜,安德烈亚斯,第二任丈夫
玛达丽娜,埃利亚斯,情人
多利安,阿波罗(把5岁萨丽娅咬毁容了),狗
奥德丽娅·奥蒂,马科斯·瓦尔瓦里斯,儿子
奥德丽娅,玛达丽娜,朋友
马达丽娜,安德烈亚斯·贾纳科斯,老公
马科斯,加里,伙伴
马科斯,阿方索,伙伴
马科斯,詹娜,女友
小帕丽,埃克托尔·华雷斯,邻居
塞萨尔,埃克托尔·华雷斯,儿子
小帕丽,吉莱斯皮夫人,老师
小帕丽,杰里米·沃里克,同学

1. 效果图如下

字数太多,很乱,需要对标签进行自适应下:
在这里插入图片描述

标签自适应效果图如下:
在这里插入图片描述

添加node颜色及边缘颜色,效果图如下:
在这里插入图片描述

2. 优化

只尝试了最基本的绘制,还可以尝试以下示例:

  • 还可以对主角进行标签颜色及大小区分:
    在这里插入图片描述

  • 节点发散
    在这里插入图片描述

  • 主角及关系线不同区分:

在这里插入图片描述

3. 源码

# python plot_qshc.py
# 对群山回唱人物关系图谱进行绘制import sysimport matplotlib.pyplot as plt
import networkx as nxprint(sys.getdefaultencoding())
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsenodes = []
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/drawing/plot_chess_masters.html#sphx-glr-auto-examples-drawing-plot-chess-masters-py

  • https://networkx.org/documentation/latest/auto_examples/graph/plot_words.html#sphx-glr-auto-examples-graph-plot-words-py

  • https://networkx.org/documentation/latest/auto_examples/drawing/plot_weighted_graph.html#sphx-glr-auto-examples-drawing-plot-weighted-graph-py

  • https://networkx.org/documentation/latest/auto_examples/algorithms/plot_dedensification.html

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...