使用Pyvis在交互式Networkx图中显示节点和边属性
编辑
我把 pyvis
更新到了 0.3.2 版本,现在图表运行正常了。
如果你对在 Pyvis 中显示 Networkx 图的节点和边的属性感兴趣,可以继续往下看。
原始问题
我有两个 Pandas 数据框:edges_df
和 nodes_df
。我用它们创建了一个 networkx 图 G
,然后把这个图传给了 Pyvis 网络。
edges_df
的内容如下:
源 | 目标 | 颜色 | 标题 | |
---|---|---|---|---|
140 | 1 | 3 | #379951 | T/B |
146 | 5 | 15 | #379951 | T/B |
7 | 1 | 2 | #0b03fc | 78 |
0 | 0 | 1 | #0b03fc | 62 |
139 | 4 | 10 | #379951 | T/B |
nodes_df
的内容如下:
ID | 颜色 | 标题 | |
---|---|---|---|
1 | 1 | #47abfc | 我是节点 1 |
15 | 15 | #47abfc | 我是节点 15 |
14 | 14 | #f24e77 | 我是节点 14 |
2 | 2 | #f24e77 | 我是节点 2 |
8 | 8 | #f24e77 | 我是节点 8 |
我创建 G
的代码如下:
# Declare nx graph from pandas edges
G = nx.from_pandas_edgelist(
df=edges_df,
source='src',
target='dst',
edge_attr=['color', 'title']
)
# Set node attributes from pandas
nx.set_node_attributes(
G=G,
values=nodes_df_renamed.set_index('id').to_dict('index')
)
文档中提到:
请注意,Networkx 节点属性与 pyvis 使用的属性名称相同(例如,title)的情况下,会直接转换为相应名称的 pyvis 节点属性。
因此,我认为如果我的 networkx 图有符合 pyvis 命名规则的节点属性,生成的图就会自动显示每个节点的属性。
然而,当我从 G
构建一个 pyvis Network
时,生成的图并没有按预期显示颜色或标题。例如,我本来希望节点 1 是蓝色(#47abfc),并且当用户悬停在上面时显示字符串 '我是节点 1'
。
# Imports
from pyvis import network as net
import networkx as nx
from IPython.display import HTML
# Declare pyvis graph from G
gpv = net.Network(notebook=True, cdn_resources='in_line')
gpv.from_nx(G)
gpv.save_graph('example.html')
HTML(filename='example.html')
可惜的是,我的边和节点的 title
和 color
属性都没有按预期显示。
我该如何让 Pyvis 根据我的 networkx 图的相应属性来渲染节点和边呢?
我正在处理的数据非常庞大(有 250 亿条边),我希望避免使用循环一个一个添加节点或边。
总结
通过创建一个符合 Pyvis 命名规则 的 Networkx 图,生成的可视化将继承 Networkx 图的属性。
例如,添加节点属性 title
将导致悬停时显示相应节点的标题。
0 个回答
暂无回答