Python基于network模块制作电影人物关系图


Posted in Python onJune 19, 2020

在我们生活的世界中,每一个人以及每一个事物相互之间都存在着关系,有直接关系,也有间接关系,最终会形成一个无形的大的关系网。network模块是一个用python语言开发的图论和复杂网络建模工具,模块内置了常用的图与复杂网络分析算法。

network模块有四种图:Graph、DiGraph、MultiGraph、MultiDigraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。其中Graph是用点和线来刻画离散事物集合中,每对事物间以某种方式相联系的数学模型。

下面我们来分析《复仇者联盟4》人物关系:

import pandas as pd
#导入绘图模块
import networkx as nx
import matplotlib.pyplot as plt
# 读取文件
aa =r'F:\\python入门\\python编程锦囊\\Code(实例源码及使用说明)\\Code(实例源码及使用说明)\\Code(实例源码及使用说明)\\09\\data\\fl4.xls'
df = pd.DataFrame(pd.read_excel(aa))
#去除重复项,并转换成列表
df1=df['label1'].drop_duplicates().values.tolist()
df2=df[['label1','label2','weight']]
#设置画布大小
plt.figure(figsize=(6, 5))
#颜色数据
colors = df['color'].drop_duplicates().values.tolist()
#G:图表,一个networkx图
G = nx.Graph()
# 添加边
for i in df2.index:
  G.add_edge(df2.label1[i], df2.label2[i], weight=df2.weight[i])
# 定义两个边,并给边赋予权重,其中u是起点,v是终点,d是权重
edge1 = [(u, v) for (u, v, d) in G.edges(data=True) if (d['weight'] >=1)]
edge2 = [(u, v) for (u, v, d) in G.edges(data=True) if (d['weight'] >=15)]
# 图的布局
# 节点在一个圆环上均匀分布
pos = nx.circular_layout(G)
#用Fruchterman-Reingold算法排列节点
#pos=nx.spring_layout(G)
#节点随机分布
#pos=nx.spring_layout(G)
# 点
#node_size指定节点的尺寸大小,默认值为300
#node_color指定节点的颜色,默认值为红色
#node_shape节点的形状,默认值为圆形,用o表示
nx.draw_networkx_nodes(G, pos, alpha=1, node_size=200,node_color=colors,node_shape='o')
#nx.draw_networkx_nodes(G, pos, alpha=1, node_size=300,node_color=colors,node_shape='p')
# 边
#pos:字典类型,节点作为键、位置作为值。位置是长度为2的序列
#edgelist:边缘元组的集合,只绘制指定的边,默认值为G.edges()
#width边的宽度,默认值为1.0
#alpha透明度,默认值为1.0(不透明),0为完全透明
#edge_color边的颜色,默认值为黑色
#style边的样式,默认值为实线。
nx.draw_networkx_edges(G, pos, edgelist=edge1,width=1, alpha=0.3, edge_color='g', style='dashed')
nx.draw_networkx_edges(G, pos, edgelist=edge2, width=1.5, alpha=0.5, edge_color='red')
# 标签
#font_size节点标签字体大小,默认值为12
nx.draw_networkx_labels(G, pos, font_size=9)
# 生成结果
plt.axis('off')
plt.title('《复仇者联盟4》人物关系图')
plt.rcParams['font.size'] = 10
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.show()

结果:

Python基于network模块制作电影人物关系图

使用力引导算法Fruchterman-Reingold排列点画图,可以大大减少边的交叉,只需要改两行代码即可:

#用Fruchterman-Reingold算法排列节点
pos=nx.spring_layout(G)
# 点
nx.draw_networkx_nodes(G, pos, alpha=1, node_size=300,node_color=colors,node_shape='p')

结果:

Python基于network模块制作电影人物关系图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中文件遍历的两种方法
Jun 16 Python
详解Python中的各种函数的使用
May 24 Python
详解python函数传参是传值还是传引用
Jan 16 Python
python对于requests的封装方法详解
Jan 03 Python
Django如何开发简单的查询接口详解
May 17 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
Python新手学习标准库模块命名
May 29 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python try...finally...的实现方法
Nov 25 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
keras中的History对象用法
Jun 19 #Python
python中rc1什么意思
Jun 19 #Python
解决keras backend 越跑越慢问题
Jun 18 #Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 #Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 #Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 #Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 #Python
You might like
一些使用频率比较高的php函数
2008/10/03 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
javascript hashtable实现代码
2009/10/13 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
vue+element+Java实现批量删除功能
2019/04/08 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
幼儿园五一活动方案
2014/02/07 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
小学生植树节活动总结
2014/07/04 职场文书
领导班子四风表现材料
2014/08/23 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
网站出售协议书范文
2014/10/10 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
学生会干部任命书
2015/09/21 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python