在 Python 中创建交互式网络图

我确信您在使用名为 Networkx 的特殊库之前已经在 python 中构建了网络图。您是否想过是否有一种与图表交互的方法?你猜怎么了?!有一个名为 Pyvis 的库,它有助于提高 Python 编程语言中网络图的交互性。

另请阅读:NetworkX 包 – Python 图形库

Pyvis 库支持可视化并为网络图添加交互性。该库构建在强大且成熟的 VisJS JavaScript 库之上。这允许快速响应的交互,并以低级 JavaScript 和 HTML 的形式提取网络图。

安装 Pyvis 库简单明了,可以使用以下命令在系统命令提示符下使用 pip 命令来完成。


代码实现

现在让我们继续使用 Python 编程语言中的 Pyvis 库来实现交互式网络图的代码。我们将首先使用下面的代码片段导入所有必要的库/模块。

1
2
3
from pyvis import network as net
from IPython.core.display import display, HTML
import random

我们将首先创建一个仅包含节点且节点之间没有边的网络图。可以使用 Network 函数来创建空图,该函数指定其中网络图的属性,包括背景颜色、标题、高度和宽度。

接下来,我们将使用该add_node函数向网络图中添加节点。我们将添加 10 个节点(从 1 到 10),然后将网络图转换为 HTML 格式以添加交互性并保存 HTML 文件。

1
2
3
4
5
6
7
8
9
g_only_nodes =  net.Network(height='600px',width='90%',
                  bgcolor='white',font_color="red",
                  heading="Networkx Graph with only Nodes")
 
for i in range(1,11): 
  g_only_nodes.add_node(i)
 
g_only_nodes.show('Only_Nodes.html')
display(HTML('Only_Nodes.html'))

看看只有节点的网络图是什么样子的。

创建网络图的下一步是在节点之间添加边。我们将在随机节点之间添加随机边。看看下面相同的函数。

1
2
3
4
def generate_edge():
  s = random.randint(1,10)
  d = random.randint(1,10)
  return (s,d)

在该函数中,我们将使用该random.randint函数生成随机源节点和目标节点对。我们将获得 1 到 10 之间的随机节点。为了确保我们有足够的边;我们将生成 20 条随机边。为了确保相同的边不会一次又一次重复,我们将保留(源,目标)节点对的记录。看看下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 号
18
g =  net.Network(height='600px',width='90%',
                  bgcolor='white',font_color="red",
                  heading="A Simple Networkx Graph")
 
for i in range(1,11): 
  g.add_node(i)
 
i=0
chosen_set = []
while(i!=20):
  eg = generate_edge()
  if(eg[0]!=eg[1] and not (eg in chosen_set)):
      chosen_set.append(eg)
      g.add_edge(eg[0],eg[1])
      i+=1
 
g.show('Simple_Network_Graph.html')
display(HTML('Simple_Network_Graph.html'))

添加边后,我们将得到一个如下所示的网络图。看看网络图是多么令人惊奇,以及图表的交互性如何!


结论

Pyvis 是一个功能强大的 python 模块,用于使用 Python 编程语言可视化和交互式操作网络图。我希望您能够使用该库构建网络图并享受与图的交互。

感谢您的阅读!

快乐编码!😃

另请阅读:Python 网络分析 – 完整指南