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下使用状态机的教程
Apr 11 Python
初步剖析C语言编程中的结构体
Jan 16 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Django框架models使用group by详解
Mar 11 Python
django model通过字典更新数据实例
Apr 01 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python内置进制转换函数的操作
Jun 02 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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
一个分页的论坛
2006/10/09 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python list操作用法总结
2015/11/10 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
keras 多任务多loss实例
2020/06/22 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
采购员岗位职责
2013/11/15 职场文书
自荐信格式技巧有哪些呢
2013/11/19 职场文书
车间主任岗位职责
2014/03/16 职场文书
北京天坛导游词
2015/02/12 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python