关于d3.js:使用python和networkx的节点上的交互式标签

Interactive labels on nodes using python and networkx

我正在尝试使用带有networkx的python创建图,该图具有许多可以交互研究的节点。 我希望能够单击或悬停在节点上方并显示否则未显示的标签。

D3似乎能够做到这一点,并且有一些python实现

mpld3

Drew Conway的Networkx前叉

mpld3适用于散点图,但我不知道如何使它完成我想要的图形...

从Drew Conway实现示例代码:

1
2
import networkx as nx  
from networkx.readwrite import d3_js

1
2
3
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
ImportError: cannot import name d3_js

如果分叉的networkx包未放在python的系统路径中,这看起来可能是一个错误。...但是,我检查了sys路径的内容并发现networkx ...所以我很困惑。


看起来mpld3可以工作。 您可以通过调用draw_networkx_nodes()来获取散点数据,而draw_networkx_nodes()只是scatter()的包装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import matplotlib.pyplot as plt
import numpy as np
import mpld3

import networkx as nx
G = nx.path_graph(4)
pos = nx.spring_layout(G)

fig, ax = plt.subplots(subplot_kw=dict(axisbg='#EEEEEE'))
scatter = nx.draw_networkx_nodes(G, pos, ax=ax)
nx.draw_networkx_edges(G, pos, ax=ax)

labels = G.nodes()
tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels)
mpld3.plugins.connect(fig, tooltip)

mpld3.show()