Python基于network模块制作电影人物关系图

 更新时间:2020年06月19日 08:39:58   作者:夏日的向日葵  
这篇文章主要介绍了Python基于network模块制作电影人物关系图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在我们生活的世界中,每一个人以及每一个事物相互之间都存在着关系,有直接关系,也有间接关系,最终会形成一个无形的大的关系网。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()

结果:

使用力引导算法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')

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python3 replace()函数使用方法

    Python3 replace()函数使用方法

    这篇文章主要介绍了Python3 replace()函数使用方法,需要的朋友可以参考下
    2018-03-03
  • 使用python flask框架开发图片上传接口的案例详解

    使用python flask框架开发图片上传接口的案例详解

    刚领导安排任务,需求是这样的开发一个支持多格式图片上传的接口,并且将图片压缩,支持在线预览图片,下面小编分享下使用python flask框架开发图片上传接口的案例详解,感兴趣的朋友一起看看吧
    2022-04-04
  • Django中prefetch_related()函数优化实战指南

    Django中prefetch_related()函数优化实战指南

    我们可以利用Django框架中select_related和prefetch_related函数对数据库查询优化,这篇文章主要给大家介绍了关于Django中prefetch_related()函数优化的相关资料,需要的朋友可以参考下
    2022-11-11
  • python实现定时压缩指定文件夹发送邮件

    python实现定时压缩指定文件夹发送邮件

    这篇文章主要为大家详细介绍了python实现定时压缩指定文件夹发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python Tkinter模块 GUI 可视化实例

    Python Tkinter模块 GUI 可视化实例

    今天小编就为大家分享一篇Python Tkinter模块 GUI 可视化实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实现Dijkstra静态寻路算法

    python实现Dijkstra静态寻路算法

    这篇文章主要介绍了python实现Dijkstra静态寻路算法,常用于路由算法或者作为其他图算法的一个子模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • DRF QuerySet Instance数据库操作功能概述

    DRF QuerySet Instance数据库操作功能概述

    这篇文章主要为大家介绍了DRF QuerySet Instance数据库处理的功能概述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 详解利用Python scipy.signal.filtfilt() 实现信号滤波

    详解利用Python scipy.signal.filtfilt() 实现信号滤波

    这篇文章主要介绍了详解利用Python scipy.signal.filtfilt() 实现信号滤波,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • 基于Python+Tkinter实现一个简易计算器

    基于Python+Tkinter实现一个简易计算器

    Tkinter作为Python的标准库,是非常流行的Python GUI工具,同时也是非常容易学习的。本文将利用Tkinter绘制一个简单的计算器,感兴趣的可以试一试
    2022-01-01
  • numpy 数组拷贝地址所引起的同步替换问题

    numpy 数组拷贝地址所引起的同步替换问题

    本文主要介绍了numpy 数组拷贝地址所引起的同步替换问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论