使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制

39 篇文章 5 订阅
12 篇文章 5 订阅

使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制

在这里插入图片描述

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

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

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

0. 人物关系表

qshq.txt

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

1. 效果图如下

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

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

添加node颜色及边缘颜色,效果图如下:
在这里插入图片描述
用neo4j绘制图谱效果图如下;

在这里插入图片描述

在这里插入图片描述

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()

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值