gpt4 book ai didi

python - 在 python networkx 图中为节点添加工具提示

转载 作者:行者123 更新时间:2023-12-02 02:53:04 24 4
gpt4 key购买 nike

我使用 networkx.DiGraph 创建了一个有向图,然后使用 networkx.draw_spring(graph) 绘制了它,所以图中的所有节点都有一些细节存储在词典列表。

如何添加类似“工具提示”的内容以在鼠标悬停在每个节点上时查看这些详细信息?如果可能的话,如何使这个“工具提示”对所有节点始终可见,而不仅仅是通过悬停?

最佳答案

始终可见

要标记所有节点,您只需要使用annotate。像这样

import matplotlib.pyplot as plt
import networkx as nx

G = nx.path_graph(5)
attrs = {0: {'attr1': 20, 'attr2': 'nothing'}, 1: {'attr2': 3}, 2: {'attr1': 42}, 3: {'attr3': 'hello'}, 4: {'attr1': 54, 'attr3': '33'}}
nx.set_node_attributes(G, attrs)
nx.draw(G)

for node in G.nodes:
xy = pos[node]
annot.xy = xy
node_attr = G.nodes[node]
text = '\n'.join(f'{k}: {v}' for k, v in G.nodes[node].items())
text = f'node {node}\n' + text
ax.annotate(text, xy=xy)

悬停

这是一个在悬停时获取工具提示的工作示例。这是基于使用标准 matplotlib 图的工具提示 here .我使用 draw_networkx_nodes 来获取用于悬停和显示工具提示的对象,而不是使用 draw_spring。但是您可以使用 spring_layout 手动定义位置。

import matplotlib.pyplot as plt
import networkx as nx

G = nx.path_graph(5)
attrs = {0: {'attr1': 20, 'attr2': 'nothing'}, 1: {'attr2': 3}, 2: {'attr1': 42}, 3: {'attr3': 'hello'}, 4: {'attr1': 54, 'attr3': '33'}}
nx.set_node_attributes(G, attrs)

fig, ax = plt.subplots()
pos = nx.spring_layout(G)
nodes = nx.draw_networkx_nodes(G, pos=pos, ax=ax)
nx.draw_networkx_edges(G, pos=pos, ax=ax)

annot = ax.annotate("", xy=(0,0), xytext=(20,20),textcoords="offset points",
bbox=dict(boxstyle="round", fc="w"),
arrowprops=dict(arrowstyle="->"))
annot.set_visible(False)

def update_annot(ind):
node = ind["ind"][0]
xy = pos[node]
annot.xy = xy
node_attr = {'node': node}
node_attr.update(G.nodes[node])
text = '\n'.join(f'{k}: {v}' for k, v in node_attr.items())
annot.set_text(text)

def hover(event):
vis = annot.get_visible()
if event.inaxes == ax:
cont, ind = nodes.contains(event)
if cont:
update_annot(ind)
annot.set_visible(True)
fig.canvas.draw_idle()
else:
if vis:
annot.set_visible(False)
fig.canvas.draw_idle()

fig.canvas.mpl_connect("motion_notify_event", hover)

plt.show()

enter image description here

关于python - 在 python networkx 图中为节点添加工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61604636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com