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 AES加密模块用法分析
May 22 Python
Python 调用Java实例详解
Jun 02 Python
Python内置函数 next的具体使用方法
Nov 24 Python
python监控键盘输入实例代码
Feb 09 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
解决pyttsx3无法封装的问题
Dec 24 Python
Python 使用type来定义类的实现
Nov 19 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
python模拟实现分发扑克牌
Apr 22 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
python小技巧——将变量保存在本地及读取
Nov 13 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数组的使用方法小结
2010/09/23 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
深入理解ES6中let和闭包
2018/02/22 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
详解vue引入子组件方法
2019/02/12 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
通过cmd进入python的实例操作
2019/06/26 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
python中实现栈的三种方法
2020/12/19 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
医药类个人求职的自我评价
2014/02/12 职场文书
教师网络培训感言
2014/03/09 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
公司人力资源管理制度
2015/08/05 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
MySQL GTID复制的具体使用
2022/05/20 MySQL
tree shaking对打包体积优化及作用
2022/07/07 Java/Android