How to Highlight any given path in pyvis network graph visualization?

问题描述 投票:0回答:1

我正在做一个项目,首先我必须使用 a-star 算法检测巨大网络图中的最短路径,然后使用 pyvis 网络可视化相同的图。然而,在这个 pyvis 网络中,我计算的路径应该突出显示为最短路径。

例如:考虑将此代码用于权力的游戏角色网络

from pyvis.network import Network
import pandas as pd

got_net = Network(height='750px', width='100%', bgcolor='#222222', font_color='white')

# set the physics layout of the network
got_net.barnes_hut()
got_data = pd.read_csv('https://www.macalester.edu/~abeverid/data/stormofswords.csv')

sources = got_data['Source']
targets = got_data['Target']
weights = got_data['Weight']

edge_data = zip(sources, targets, weights)

for e in edge_data:
    src = e[0]
    dst = e[1]
    w = e[2]

    got_net.add_node(src, src, title=src)
    got_net.add_node(dst, dst, title=dst)
    got_net.add_edge(src, dst, value=w)

neighbor_map = got_net.get_adj_list()

# add neighbor data to node hover data
for node in got_net.nodes:
    node['title'] += ' Neighbors:<br>' + '<br>'.join(neighbor_map[node['id']])
    node['value'] = len(neighbor_map[node['id']])

got_net.show('gameofthrones.html')

现在如何突出显示此图中的特定路径?我已经浏览了文档但没有任何类似的东西

networkx graph-visualization pyvis
1个回答
3
投票

这是一个使用 NetworkX 创建图形和 gravis 可视化它的示例。我不得不使用不同的 URL,希望它是相同的数据。我使用重量作为边缘宽度,并用大重量给一些颜色上色。或者,您可以计算两个感兴趣节点之间的最短路径,然后为该路径着色或指定边宽,使其突出。

披露:我是 gravis 的作者。我不知道用 pyvis 是否可以实现同样的效果,但是因为我知道 gravis 很好地支持需求,所以我提供了这个解决方案,希望它有用。

import gravis as gv
import networkx as nx
import pandas as pd

url = 'https://raw.githubusercontent.com/pupimvictor/NetworkOfThrones/master/stormofswords.csv'
got_data = pd.read_csv(url)

g = nx.Graph()
for i, (source, target, weight) in got_data.iterrows():
    width = weight/10
    g.add_edge(source, target, size=width, color='blue' if width > 3 else 'black')
    
gv.d3(g)

编辑:如果您在 Jupyter 笔记本中使用此代码,这是输出。您还可以使用常规的 Python 解释器并在浏览器窗口中显示绘图,该窗口会弹出

fig = gv.d3(g)
后跟
fig.display()
.

© www.soinside.com 2019 - 2024. All rights reserved.