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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
Python中字典的基础知识归纳小结
Aug 19 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
深入理解python对json的操作总结
Jan 05 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
Python读取stdin方法实例
May 24 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
pandas中ix的使用详细讲解
Mar 09 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python2.6版本pip安装步骤解析
Aug 17 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
pandas series序列转化为星期几的实例
2018/04/11 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
python实现简易数码时钟
2021/02/19 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python自定义函数def的应用详解
2020/06/03 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
竟聘演讲稿范文
2013/12/31 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书