python - Python Netgraph 交互式标签
问题描述
我正在尝试使用 netgraph 和 networkx 创建一个交互式绘图。
我希望绘图允许节点移动,并且随着节点的移动,边和边标签也将动态更新。
netgraph 的作者在这里解决了移动节点的问题。现在,当我制作一个更简单的绘图并尝试标记边缘时,标签保持静态,有时甚至不在边缘上。
似乎在最后两行处理类似于 node_positions 的 edge_positions 至少应该解决标签不移动的问题。为什么标签没有锚定到特定边缘仍然令人费解。有谁知道是否可以达到预期的效果?
这是移动任何东西之前的片段:
这是将右下角节点移动到左上角后的片段:
import matplotlib.pyplot as plt
import networkx as nx
import netgraph # pip install netgraph
#Graph creation:
G=nx.Graph(type="")
for i in range(6):
G.add_node(i,shape="o")
#Changing shape for two nodes
G.nodes[1]['shape'] = "v"
G.nodes[5]['shape'] = "v"
#Add edges
G.add_edge(1,2)
G.add_edge(4,5)
G.add_edge(0,4)
G.add_edge(2,3)
G.add_edge(2,4)
labs={(1,2):"1 to 2"}
nx.draw_networkx_edge_labels(G, pos=nx.spring_layout(G),edge_labels=labs)
#Get node shapes
node_shapes = nx.get_node_attributes(G,"shape")
# Create an interactive plot.
# NOTE: you must retain a reference to the object instance!
# Otherwise the whole thing will be garbage collected after the initial draw
# and you won't be able to move the plot elements around.
pos = nx.layout.spring_layout(G)
######## drag nodes around #########
# To access the new node positions:
plot_instance = netgraph.InteractiveGraph(G, node_shape=node_shapes, node_positions=pos, edge_positions=pos)
node_positions = plot_instance.node_positions
edge_positions = plot_instance.edge_positions
解决方案
要将其作为正式答案,您需要向InteractiveGraph
对象添加要绘制(和移动)边缘标签的信息,即以下
netgraph.InteractiveGraph(G,
node_shape=node_shapes,
node_positions=pos,
edge_positions=pos,
edge_labels=labs)
(强调最后一个参数)
正如您已经注意到的那样,您不需要调用nx.draw_networkx_edge_labels
.
推荐阅读
- python - 沿 3D NumPy 数组中的轴将最大值设置为 1,其余设置为零
- python - Django 2.1 startproject 抛出奇怪的错误
- c# - UWP - SQLite - 试图加载格式不正确的程序
- android - BaseAdapter onItemClick 引用旧实例
- python - 抽样分布正态近似不拟合
- rust - 切片的安全 memset 相当于什么?
- react-day-picker - react-day-picker DayPickerInput 未触发 onDayChange 事件
- firebase - 如何使用 vue.js 将简单数据保存在 firebase 中?
- java - IBM java8 BigDecimal 浮动问题与 MathContext.DECIMAL64
- python - 这个 python 概念叫什么?使用子属性的父类。