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解析xml中dom元素的方法
Mar 12 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
python集合类型用法分析
Apr 08 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Mac 上切换Python多版本
Jun 17 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
wxPython实现整点报时
Nov 18 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python pip使用超时问题解决方案
Aug 03 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 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/04/09 PHP
php session处理的定制
2009/03/16 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
javascript some()函数用法详解
2014/11/13 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python操作mysql代码总结
2018/06/01 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python实现KNN分类算法
2019/10/16 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Python用SSH连接到网络设备
2021/02/18 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
linux面试题参考答案(9)
2016/01/29 面试题
事业单位接收函
2014/01/10 职场文书
绩效工资分配方案
2014/01/18 职场文书
数学教学随笔感言
2014/02/17 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers