Python Pyvis库详解:创建交互式网络图

d10a0b0ffb2d8b024f6d36bdd7e289ee.jpeg

更多Python学习内容:ipengtao.com

大家好,我是涛哥,今天为大家分享 Python Pyvis库详解:创建交互式网络图,文章4000字,阅读大约15分钟,大家enjoy~~

Pyvis是一个基于JavaScript库NetworkX的Python库,旨在简化创建和展示交互式网络图的过程。本文将深入介绍Pyvis库的基础用法和高级功能,通过丰富的示例代码,帮助大家更全面地了解如何使用Pyvis库构建具有交互性的网络图。

安装与基础用法

安装Pyvis

使用以下命令通过pip安装Pyvis:

pip install pyvis

安装完成后,你就可以开始在Python中使用Pyvis创建交互式网络图了。

基础用法

从创建一个简单的网络图开始。首先,导入必要的模块:

from pyvis.network import Network

创建一个Network实例:

net = Network()

向网络图中添加一些节点和边:

net.add_node(1, label="Node 1")
net.add_node(2, label="Node 2")
net.add_edge(1, 2, label="Edge 1-2")

以上代码添加了两个节点(带有标签)和一条边。节点和边都有唯一的标识符。

最后,可以将网络图保存为HTML文件并在浏览器中打开:

net.show("simple_network.html")

运行完这些步骤后,将得到一个名为"simple_network.html"的文件,其中包含你创建的网络图。在浏览器中打开该文件,你将看到一个简单的交互式网络图。

高级可视化

定制节点和边

Pyvis可以对节点和边进行更加精细的定制。通过设置节点的颜色、大小,以及边的权重,可以使网络图更富有信息。

# 定制节点
net.add_node(1, label="Node 1", color="red", size=30)

# 定制边
net.add_edge(1, 2, label="Edge 1-2", color="blue", width=2)

通过这些参数,可以展现节点和边的重要性或类型。

布局算法

Pyvis支持多种布局算法,用于调整网络图中节点的位置。比如,使用force_atlas_2based算法:

net.barnes_hut()

这将使用Barnes-Hut近似算法进行布局,使得网络图更加紧凑和清晰。

图例和标题

为了使网络图更具可读性,可以添加图例和标题:

net.add_legend(["Node Type 1", "Node Type 2"])
net.set_title("Interactive Network Graph")

这将为网络图增色不少。

保存和展示

最后,将劳动成果保存为HTML文件:

net.show("advanced_network.html")

通过打开这个文件,可以与你的交互式网络图进行互动。

高级功能拓展

动态网络图

Pyvis支持创建动态网络图,通过时间轴展示网络图的演化过程。

下面是一个简单的动态网络图示例:

# 动态网络图示例
net = Network(notebook=True)

# 添加节点和边
net.add_node(1, label="Node 1")
net.add_node(2, label="Node 2")
net.add_edge(1, 2, label="Edge 1-2")

# 添加时间轴
net.set_options('''
var options = {
  physics: {enabled: true},
  edges: {smooth: {type: 'continuous'}},
  interaction: {hover: true},
  manipulation: {enabled: true, initiallyActive: false},
  nodes: {shadow: true}
};
''')

# 保存为HTML文件
net.show("dynamic_network.html")

图布局调整

Pyvis支持多种布局算法,包括随机布局、圆形布局、力导向布局等。通过设置不同的布局算法,可以更灵活地调整网络图的外观。

# 图布局示例
net = Network()

# 添加节点和边
net.add_node(1, label="Node 1")
net.add_node(2, label="Node 2")
net.add_edge(1, 2, label="Edge 1-2")

# 设置布局算法为圆形
net.set_options('''
var options = {
  layout: {
    hierarchical: {
      enabled: true,
      levelSeparation: 150,
      nodeSpacing: 200,
      treeSpacing: 200,
      blockShifting: true,
      edgeMinimization: true,
      parentCentralization: true,
      direction: 'LR',
      sortMethod: 'directed'
    }
  }
};
''')

# 保存为HTML文件
net.show("circle_layout_network.html")

扩展到大规模网络

对于大规模网络图,Pyvis也提供了一些性能优化的选项。使用stabilization参数可以让网络图在加载时更稳定。

# 大规模网络图优化
net = Network()

# 添加大量节点和边
for i in range(100):
    net.add_node(i, label=f"Node {i}")
    if i > 0:
        net.add_edge(i - 1, i, label=f"Edge {i-1}-{i}")

# 设置优化参数
net.set_options('''
var options = {
  physics: {
    stabilization: {
      enabled: true,
      iterations: 1000,
      fit: true
    }
  }
};
''')

# 保存为HTML文件
net.show("large_network.html")

实际应用场景

生物网络分析

Pyvis在生物信息学领域中有着广泛的应用,特别是在生物网络分析方面。通过使用Pyvis,可以轻松构建生物分子之间的相互关系图。比如,可以将蛋白质、基因或代谢产物表示为网络节点,并使用边表示它们之间的相互作用。通过设置节点和边的属性,可以在网络图中呈现更多的生物信息。

net.add_node("Protein A", label="Protein A", color="green", size=20)
net.add_node("Protein B", label="Protein B", color="blue", size=25)
net.add_edge("Protein A", "Protein B", label="Interaction", color="red", width=2)

这样的网络图有助于科研人员更好地理解生物体内分子之间的关系,为生物学研究提供了强大的可视化工具。

社交网络可视化

在社交网络分析中,Pyvis同样能展现出强大的威力。通过将个体表示为节点,而他们之间的关系表示为边,可以创建出逼真的社交网络图。通过定制节点的颜色、大小、形状,可以区分不同类型的个体,如用户、群组或主题。

net.add_node("User A", label="User A", color="orange", size=25, shape="ellipse")
net.add_node("User B", label="User B", color="purple", size=30, shape="ellipse")
net.add_edge("User A", "User B", label="Friendship", color="blue", width=2)

这样的网络图有助于社交媒体平台或研究人员更好地了解用户之间的关系,推动社交网络分析的深入发展。

注意事项与最佳实践

在使用Pyvis时,可以采取一些注意事项和最佳实践,以确保项目的顺利进行和性能的优化:

  1. 处理大型网络图的性能优化: 对于大型网络图,为了保持良好的性能,可以考虑以下优化措施:

  • 限制节点和边的数量,只显示关键信息。

  • 使用合适的布局算法,避免复杂的布局计算。

  • 针对大规模网络,可以考虑采用分层渲染或者采样的方式来减少图形的复杂性。

异常处理: 在使用Pyvis的过程中,要考虑可能出现的异常情况,以提高代码的稳定性和可靠性。一些常见的异常处理方式包括:

  • 使用try-except块捕获可能的异常,避免程序因错误而崩溃。

  • 使用合适的日志记录机制,记录关键信息,便于排查问题。

版本兼容性: 定期检查Pyvis库的版本并保持更新,以确保使用最新的功能和修复了已知问题的版本。

文档查阅: 在遇到问题或需要了解更多细节时,及时查阅Pyvis的官方文档。文档提供了详细的说明、示例代码和常见问题解答,能够帮助更好地使用该库。

社区参与: 如有疑问或需要进一步的支持,可以参与Pyvis库的社区讨论,分享经验,获得其他开发者的建议。

总结

Pyvis库为Python中的网络图可视化提供了强大而灵活的工具。通过本文的介绍,深入了解了Pyvis的安装与基础用法、高级可视化功能以及实际应用场景。从简单的网络图创建到节点颜色、边权重等高级选项,Pyvis提供了广泛的功能,使得用户能够轻松创建交互式网络图。在实际应用中,通过案例展示了Pyvis在生物网络分析、社交网络可视化等领域的强大表现。同时,也强调了在使用Pyvis时需要注意的事项,包括性能优化、异常处理等,以确保项目的顺利进行。

Pyvis的简洁易用和强大功能使其成为网络图可视化的理想选择。通过深入了解Pyvis库,开发者将能够更加熟练地创建令人印象深刻的交互式网络图,为数据分析、科研等领域提供更好的可视化效果。通过充分利用Pyvis的优势,可以更好地理解和呈现复杂关系,为数据科学和网络分析提供有力支持。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com

干货笔记整理

  100个爬虫常见问题.pdf ,太全了!

Python 自动化运维 100个常见问题.pdf

Python Web 开发常见的100个问题.pdf

124个Python案例,完整源代码!

PYTHON 3.10中文版官方文档

耗时三个月整理的《Python之路2.0.pdf》开放下载

最经典的编程教材《Think Python》开源中文版.PDF下载

9afbcb11f5d37608dab8cb289e4b867d.png

点击“阅读原文”,获取更多学习内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/183528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【matlab程序】南海土台风画法

【matlab程序】南海土台风画法 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python海洋专…

U-boot(四):start_armboot

本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…

二十一、文档操作

目录 一、添加文档 1、编写代码 2、运行并查看 二、查询文档 1、编写代码 2、运行并查看 三、删除文档 1、编写代码 2、运行并查看 四、修改文档 方式一:全量修改,会删除旧文档,添加新文档 方式二:局部修改。增量修改&…

nodejs 如何将 Buffer 数据转为 String

问题说明 使用webSocket的时候出现了一个问题,前端小程序和nodejs后端建立websocket连接后,使用send方法发送到后端为buffer格式,以下为我前后端代码 1、前端小程序代码 //创建webSocket连接 const socket uni.connectSocket({url: wss…

工作中死循环害死人

背景:研发的一段代码,循环一直没有跳出,导致其他依赖逻辑有问题,生产事故导致9万左右数据不正常。 这里while(true)真的不要轻易用 ,后来研发改动限制mysql的id切分步长,控制不会有数…

FreeRTOS源码阅读笔记4--semphr.h

信号量是特殊的队列--无法存储消息的队列,相关的接口函数声明在semphr.h中,通过宏定义替换队列函数实现。 4.1创建二值信号量xSemaphoreCreateBinary() 4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE:一个宏,表示创建队列的…

gitt开源项目的意义,公司为什么会对在gitt上有开源项目的人更大机会

Git是一种分布式版本控制系统,它可以帮助程序员管理代码的历史版本和协同工作。同时,Git也成为了开源项目的主要托管平台之一。Git的开源项目意义重大,因为这种开源项目托管平台可以帮助开发者将代码和项目分享给全球的开发者,并且…

node版本管理工具-nvm

1、 下载地址 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.11 2、 选择安装地址不能有空格,中文 3、 使用命令

微服务学习(十二):安装Minio

微服务学习(十二):安装Minio 一、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统,非常适合于存储大容量非结构化的数据,例如图片、视…

linux上的通用拍照程序

最近因为工作需要,在ubuntu上开发了一个拍照程序。 为了找到合适的功能研究了好几种实现方式,在这里记录一下。 目录 太长不看版 探索过程 v4l2 QT opencv4.2 打开摄像头 为什么不直接打开第一个视频节点 获取所有分辨率 切换摄像头 太长不看…

MySQL错误之ONLY_FULL_GROUP_BY

报错信息: 翻译: 对该报错的解释 所以,实际上该报错是由于在SQL查询语句中有group by,而这个包含group by的SQL查询写的并不规范导致的,这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格,如果select列表…

51单片机IO口的四种工作状态切换

51单片机IO口的四种工作状态切换 1.概述 这篇文章介绍单片机IO引脚的四种工作模式,每个模式都有各自的用武之地,后面在驱动外设硬件时会用它不同的模式。 2.IO口四种工作模式介绍 PnM1PnM0I/O口工作模式00准双向口:灌电流达20mA&#xff…

leetcode:合并两个有序链表

题目描述 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目分析 这个算法思路很简单:就是直接找小尾插 定义一个tail和head,对比两个链表结点的val,小的尾插到tail->next,如果一个链表…

ebpf实战(一)-------监控udp延迟

问题背景: 为了分析udp数据通信中端到端的延迟,我们需要对整个通信链路的每个阶段进行监控,找出延迟最长的阶段. udp接收端有2个主要路径 1.数据包到达本机后,由软中断处理程序将数据包接收并放入udp socket的接收缓冲区 数据接收流程 2. 应用程序调用recvmsg等a…

如何解决tinder注册失败的问题?

tinder创立在2012年,是一款海外热门的交友软件。2020年,Tinder拥有620万用户和7500万月活跃用户。截至2021年,Tinder在全球范围内的匹配记录超过650亿。已成为全球最受欢迎的约会软件之一。 目前tinder暂时未对中国大陆开发使用,…

一个最简单的工业通讯数据分析例子

1.背景 对工业设备的通讯协议进行分析可以帮助我们更好地理解其工作原理和相关技术,并且有助于以下几个方面: 1. 优化工业设备的通讯效率:了解通讯协议的细节可以帮助我们找到通讯效率低下的原因并进行优化,提高设备的通讯效率和…

vue3实现验证码校验的功能

📓最近想实现使用vue3实现一个简易的前端验证码校验的功能,就花了点时间实现了,这只是一个简易版的,但是用在项目中是没有啥问题的,废话不多说,先来看下最终实现的效果。 📓现在让我们来一步一步…

java制作简单飞翔的鸟

创建三个包,存放代码。把图片放进文件中 APP包(运行) GameApp类 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包(主内容) Barri…

如何开发洗鞋店用的小程序

随着人们生活水平的提高,洗护行业是越来越细分化了,从最开始的干洗店包含洗护行业的所有服务到现在有专门为洗鞋开的店,如果开发一款洗鞋店用的小程序,可以实现用户在家下单直接有人上门取鞋的话,应该如何去开发呢&…

高质量短效SOCKS5代理IP是什么意思?作为技术你了解吗

小张是一位网络安全技术测试员,最近他接到了一个头疼的任务,那就是评估公司系统的安全性,因此他前来咨询,在得知SOCKS5代理IP可以帮他之后,他不禁产生疑问,这是什么原理?其实和小张一样的朋友不…