社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

pyvis,一个超实用的 Python 库!

python • 3 周前 • 40 次点击  

大家好,今天为大家分享一个超实用的 Python 库 - pyvis。

Github地址:https://github.com/WestHealth/pyvis


Python pyvis库是一个专注于网络可视化的强大工具,它基于JavaScript的vis.js库构建,为Python用户提供了创建交互式网络图的简便方法。pyvis特别适用于展示关系数据,如社交网络、组织结构图、知识图谱等。它通过提供Python接口来生成可在网页浏览器中交互操作的HTML网络图,使数据科学家和分析师能够直观地探索和呈现复杂的网络结构。

安装

1、基本安装方法

pyvis的安装非常简单,可以通过pip包管理器完成:

pip install pyvis

2、验证安装

安装完成后,可以通过导入库并检查版本来验证安装是否成功:

import pyvis
print(pyvis.__version__)

如果没有报错并显示版本号,则说明安装成功。

特性

  • 交互式可视化:生成可缩放、拖拽和交互的网络图
  • 易用的API:简洁直观的Python接口
  • NetworkX兼容:可以直接将NetworkX图转换为pyvis交互式图
  • 高度可定制:可调整节点、边的颜色、大小、标签等视觉属性
  • 物理模拟:内置多种物理引擎,实现自然的图形布局
  • HTML导出:可将可视化结果导出为独立的HTML文件
  • Jupyter集成:直接在Jupyter笔记本中显示交互式图形

基本功能

1、创建简单的网络图

pyvis的核心功能是创建网络图并添加节点和边。这个示例展示了如何创建一个基本的网络图,定义节点和它们之间的连接关系。通过简单的API调用,可以快速构建直观的网络图,帮助理解实体之间的关系,如团队成员之间的协作或概念之间的联系。

from pyvis.network import Network

# 创建网络实例
net = Network(height="500px", width="100%", bgcolor="#222222", font_color="white")

# 添加节点
net.add_node(1, label="节点1", title="节点1的详细信息")
net.add_node(2, label="节点2", title="节点2的详细信息")
net.add_node(3, label="节点3", title="节点3的详细信息")

# 添加边
net.add_edge(12, value=5, title="节点1到节点2的关系")
net.add_edge(13, value=3, title="节点1到节点3的关系")
net.add_edge(23, value=1, title="节点2到节点3的关系")

# 显示图形或保存为HTML文件
net.show("basic_network.html")

2、自定义节点和边的样式

pyvis提供了丰富的选项来自定义网络图的外观。下面的示例展示如何更改节点的颜色、大小和形状,以及边的宽度和样式。这种自定义功能使得可以通过视觉编码传达额外信息,例如使用不同颜色区分节点类别,或使用边的宽度表示关系强度。

from pyvis.network import Network

# 创建网络实例
net = Network(height="500px", width="100%")

# 添加自定义节点
net.add_node(1, label="节点1", color="#FF5733", size=20, shape="circle")
net.add_node(2, label="节点2", color="#33FF57", size=30, shape="box")
net.add_node(3, label="节点3", color="#3357FF", size=25, shape="diamond")

# 添加自定义边
net.add_edge(12, width=5, color="#ff0000", dashes=True)
net.add_edge(13, width=3, color="#00ff00", arrows="to")
net.add_edge(23, width=7, color="#0000ff", arrows="from")

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

3、从NetworkX导入图

pyvis与NetworkX库无缝集成,允许用户将现有的NetworkX图转换为交互式pyvis可视化。这使得用户可以利用NetworkX的强大分析功能,使用pyvis进行交互式可视化。这在进行复杂网络分析时特别有用,如社交网络分析或系统依赖关系图。

import networkx as nx
from pyvis.network import Network

# 创建NetworkX图
G = nx.random_geometric_graph(200.3)

# 添加节点属性
for i, node in enumerate(G.nodes()):
    G.nodes[node]['title'] = f"节点{node}的详细信息"
    G.nodes[node]['size'] = 10 + G.degree(node) * 2

# 转换为pyvis网络
pyvis_net = Network(height="750px", width="100%", bgcolor="#222222", font_color="white")
pyvis_net.from_nx(G)

# 设置物理布局选项
pyvis_net.toggle_physics(True)
pyvis_net.barnes_hut()

# 保存为HTML文件
pyvis_net.show("networkx_converted.html")

高级功能

1、设置物理引擎参数

pyvis使用物理模拟来确定节点布局。以下示例展示如何配置物理引擎参数,以实现不同的网络布局效果。通过调整这些参数,可以优化网络图的可读性,特别是对于大型网络,确保节点分布合理,减少重叠。

from pyvis.network import Network
import random

# 创建网络实例
net = Network(height="600px", width="100%")

# 添加随机节点和边
for i in range(20):
    net.add_node(i, label=f"节点{i}")

for _ in range(30):
    src = random.randint(019)
    dst = random.randint(019)
    if src != dst:  # 避免自环
        net.add_edge(src, dst)

# 配置物理引擎参数
physics_options = {
    "physics": {
        "barnesHut": {
            "gravitationalConstant"-2000,
            "centralGravity"0.1,
            "springLength"150,
            "springConstant"0.05,
            "avoidOverlap"0.5
        },
        "solver""barnesHut",
         "stabilization": {
            "enabled"True,
            "iterations"1000
        }
    }
}

# 应用物理引擎配置
net.set_options(physics_options)

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

2、创建分层网络图

pyvis可以创建具有层次结构的网络图,这在展示组织结构、系统架构或依赖关系时非常有用。以下示例展示如何创建分层网络图,使层次关系清晰可见。

from pyvis.network import Network

# 创建网络实例
net = Network(height="700px", width="100%", directed=True)

# 添加根节点和层级节点
net.add_node(0, label="CEO", level=0, color="#FF5733")

# 添加部门节点
departments = ["财务""技术""市场"]
for i, dept in enumerate(departments, 1):
    net.add_node(i, label=dept, level=1, color="#33FF57")
    net.add_edge(0, i)

# 添加团队节点
teams = ["前端""后端""DevOps"]
for i, team in enumerate(teams, 4):
    net.add_node(i, label=team, level= 2, color="#3357FF")
    net.add_edge(2, i)  # 连接到技术部门

# 设置分层布局选项
layout_options = {
    "layout": {
        "hierarchical": {
            "enabled"True,
            "direction""UD",  # 从上到下
            "sortMethod""directed",
            "nodeSpacing"120,
            "levelSeparation"150
        }
    }
}

# 应用布局选项
net.set_options(layout_options)

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

实际应用场景

社交网络分析

以下是一个使用pyvis进行社交网络分析的简化示例,展示如何可视化社交关系并突出显示关键节点。这种可视化在研究社交媒体影响力、组织内信息流动或社区结构时非常有用。

import networkx as nx
from pyvis.network import Network

# 创建社交网络模型
G = nx.barabasi_albert_graph(302)  # 30个节点,优先连接模型

# 计算度中心性
degree_centrality = nx.degree_centrality(G)

# 准备节点属性
for node in G.nodes():
    # 根据中心性设置节点大小
    G.nodes[node]['size'] = 10 + degree_centrality[node] * 100
    G.nodes[node]['title'] = f"用户{node}\n中心性: {degree_centrality[node]:.3f}"
    
    # 根据中心性设置颜色(红色表示高中心性)
    intensity = int(255 * degree_centrality[node] * 3)
    intensity = min(255, intensity)  # 确保不超过255
    G.nodes[node]['color'] = f"rgb({intensity}{255-intensity}, 0)"

# 转换为pyvis网络
net = Network(height="750px", width="100%", bgcolor="#222222", font_color="white")
net.from_nx(G)
net.toggle_physics(True)
net.force_atlas_2based()

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

总结

Python pyvis库是一个功能强大且易于使用的网络可视化工具,为数据科学家和分析师提供了创建交互式网络图的简便方法。它的主要优势在于结合了Python的灵活性和现代网页技术的交互功能,使用户能够以直观的方式探索和呈现复杂的网络数据。pyvis特别适用于社交网络分析、组织结构可视化、系统架构图和知识图谱等应用场景。通过简洁的API和丰富的自定义选项,pyvis使网络可视化变得简单而强大,为数据分析和决策提供了有价值的视觉支持。

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


我们还为大家准备了Python资料,感兴趣的小伙伴快来找我领取一起交流学习哦!

图片

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Beautiful Soup快速上手指南,从入门到精通(PDF下载)

Python基础学习常见的100个问题.pdf(附答案)

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

30 个Python爬虫的实战项目(附源码)

从入门到入魔,100个Python实战项目练习(附答案)!

80个Python数据分析必备实战案例.pdf(附代码),完全开放下载

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181057
 
40 次点击