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中针对函数处理的特殊方法
Mar 06 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
深入理解Python中变量赋值的问题
Jan 12 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python进程间通信Queue实例解析
Jan 25 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
Python插件机制实现详解
May 04 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
python中round函数保留两位小数的方法
Dec 04 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.MVC的模板标签系统(四)
2006/09/05 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
php下连接mssql2005的代码
2011/01/17 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
php+mysql实现无限级分类
2015/11/11 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
详解PHP PDO简单教程
2019/05/28 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python魔术方法详解
2015/02/14 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
python字符串中的单双引
2017/02/16 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
Python tkinter常用操作代码实例
2020/01/03 Python
销售员个人求职的自我评价
2014/02/10 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
中职生求职信
2014/07/01 职场文书
2015元旦节寄语
2014/12/08 职场文书
英语通知范文
2015/04/22 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL