如何在Pyvis交互式图中显示Networkx的节点与边属性
补充说明
我已将pyvis升级至0.3.2版本,图表现在可正常工作。
若你关注如何在Networkx图的Pyvis可视化中显示节点与边属性,可继续阅读。
原问题
我有两个Pandas DataFrame:edges_df和nodes_df,用它们创建了Networkx图G,并将其传入Pyvis网络。
edges_df结构如下:
| src | dst | color | title | |
|---|---|---|---|---|
| 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 | color | title | |
|---|---|---|---|
| 1 | 1 | #47abfc | I am node 1 |
| 15 | 15 | #47abfc | I am node 15 |
| 14 | 14 | #f24e77 | I am node 14 |
| 2 | 2 | #f24e77 | I am node 2 |
| 8 | 8 | #f24e77 | I am node 8 |
我创建G的代码如下:
# 从Pandas边表创建Networkx图 G = nx.from_pandas_edgelist( df=edges_df, source='src', target='dst', edge_attr=['color', 'title'] ) # 从Pandas设置节点属性 nx.set_node_attributes( G=G, values=nodes_df_renamed.set_index('id').to_dict('index') )
文档说明:
请注意,与Pyvis使用的属性名(如title)一致的Networkx节点属性,会直接映射为对应的Pyvis节点属性。
因此我认为,若Networkx图的属性名符合Pyvis命名规范,生成的图表应自动显示各节点属性。
但当我从G构建Pyvis Network时,生成的图表未按预期显示颜色或标题。例如,我期望节点1为蓝色(#47abfc),鼠标悬停时显示字符串'I am node 1'。
# 导入模块 from pyvis import network as net import networkx as nx from IPython.display import HTML # 从G创建Pyvis图 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图,生成的可视化将继承这些属性。
例如,添加节点属性title后,鼠标悬停时会显示对应节点的标题。

内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

