yFiles for Jupyter节点位置获取与GraphML代码导出问题
解决yfiles_jupyter_graphs的节点坐标获取与GraphML导出问题
一、获取布局后节点的(x,y)坐标
你调用get_node_position_mapping()得到函数对象,是因为这个方法本身返回的是一个可调用的映射生成方法,需要执行它才能拿到实际坐标。另外必须确保布局已完成,否则坐标会是初始默认值,步骤如下:
- 先调用
wait_for_layout()等待前端布局计算完成(yfiles布局是异步操作,这一步必不可少) - 执行
get_node_position_mapping()(加括号)获取节点到坐标的字典映射
二、代码导出GraphML文件
无需手动点击按钮,直接调用export_graphml()方法获取GraphML格式的文本内容,再写入文件即可完成导出。
完整示例代码
import networkx as nx from yfiles_jupyter_graphs import GraphWidget # 创建示例NetworkX图 G = nx.Graph() G.add_nodes_from([1,2,3,4]) G.add_edges_from([(1,2), (2,3), (3,4), (4,1)]) # 初始化并显示可视化组件 widget = GraphWidget(graph=G) widget.show() # 等待布局计算完成 widget.wait_for_layout() # 1. 获取所有节点坐标 position_dict = widget.get_node_position_mapping()() for node, (x, y) in position_dict.items(): print(f"节点 {node} 坐标: ({x}, {y})") # 2. 导出GraphML文件 graphml_text = widget.export_graphml() with open("exported_graph.graphml", "w", encoding="utf-8") as f: f.write(graphml_text) print("GraphML文件已保存为 exported_graph.graphml")
关键说明
wait_for_layout():必须等待布局完成,否则拿到的是节点初始占位坐标,不是布局后的最终位置get_node_position_mapping()():两次调用才能获取实际坐标字典,第一次是获取方法,第二次是执行方法返回结果export_graphml():返回的是标准GraphML格式字符串,写入文件后可直接用yEd等工具打开
内容的提问来源于stack exchange,提问作者Mattia Lo Piccolo
相关产品推荐
相关产品推荐

