Py学习  »  Python

pyvis,一个超实用的 Python 库!

python • 7 月前 • 238 次点击  

大家好,今天为大家分享一个超实用的 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