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通过pil模块获得图片exif信息的方法
Mar 16 Python
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
关于Python的一些学习总结
May 25 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Python列表对象实现原理详解
Jul 01 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
python标准库os库的函数介绍
Feb 12 Python
解决Python数据可视化中文部分显示方块问题
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 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
详解Node全局变量global模块
2017/09/28 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
Python3之文件读写操作的实例讲解
2018/01/23 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
python实现视频压缩功能
2020/12/18 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
质检的岗位职责
2013/11/17 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
《钱学森》听课反思
2014/03/01 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
教师岗位说明书
2015/09/30 职场文书
村官2015年度工作总结
2015/10/14 职场文书
导游词之唐山景点
2019/12/18 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
Python基础之字符串格式化详解
2021/04/21 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL