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解析文件示例
Jan 23 Python
Python列表append和+的区别浅析
Feb 02 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
浅谈Python处理PDF的方法
Nov 10 Python
Python 使用with上下文实现计时功能
Mar 09 Python
详解Python 正则表达式模块
Nov 05 Python
Python安装Flask环境及简单应用示例
May 03 Python
python实现弹跳小球
May 13 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 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初学者们头痛的十四个问题
2007/01/15 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
跟老齐学Python之Python安装
2014/09/12 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
详谈python http长连接客户端
2017/06/12 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
详解python配置虚拟环境
2019/04/08 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
python音频处理的示例详解
2020/12/23 Python
期末考试动员演讲稿
2014/01/10 职场文书
表扬信格式
2014/01/12 职场文书
人事经理岗位职责
2014/04/28 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
酒店员工手册范本
2015/05/14 职场文书