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 psutil模块简单使用实例
Apr 28 Python
python实现批量监控网站
Sep 09 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
Python代码中如何读取键盘录入的值
May 27 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
如何利用python实现Simhash算法
Jun 28 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使用curl模拟登录后采集页面的例子
2013/11/04 PHP
详解php的socket通信
2015/08/11 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
十佳教师事迹材料
2014/01/11 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2014年应急工作总结
2014/12/11 职场文书
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS