You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NetworkX的GraphML写入Waxman图时遇tuple类型不支持错误

解决NetworkX写入Waxman图到GraphML时的元组类型错误

问题原因

nx.waxman_graph生成的图中,每个节点默认带有pos属性,其值是表示坐标的元组(例如(0.23, 0.78))。而GraphML格式的writer不支持元组作为属性值类型,因此执行nx.write_graphml时会抛出NetworkXError。

解决方法

方法1:删除节点的pos属性(无需保留坐标时使用)

直接遍历所有节点,删除导致报错的pos属性,即可正常写入GraphML文件:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

my_graph_waxman=nx.waxman_graph(6, beta=0.8, alpha=0.6, L=None, domain=(0, 0, 1, 1), metric=None, seed=None)
nx.draw(my_graph_waxman, with_labels=True, font_weight='normal')

plt.axis('on')
plt.show()

# 删除所有节点的pos属性
for node in my_graph_waxman.nodes:
    del my_graph_waxman.nodes[node]['pos']

nx.write_graphml(my_graph_waxman, "waxman_Iteration.graphml")

方法2:转换元组为GraphML支持的类型(需保留坐标时使用)

如果需要保留节点的位置信息,可以将元组转换为列表或字符串(这两种类型都被GraphML支持):

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

my_graph_waxman=nx.waxman_graph(6, beta=0.8, alpha=0.6, L=None, domain=(0, 0, 1, 1), metric=None, seed=None)
nx.draw(my_graph_waxman, with_labels=True, font_weight='normal')

plt.axis('on')
plt.show()

# 将pos属性的元组转为列表(推荐,保留结构化数据)
for node in my_graph_waxman.nodes:
    my_graph_waxman.nodes[node]['pos'] = list(my_graph_waxman.nodes[node]['pos'])

# 也可以转为字符串:my_graph_waxman.nodes[node]['pos'] = str(my_graph_waxman.nodes[node]['pos'])

nx.write_graphml(my_graph_waxman, "waxman_Iteration.graphml")

内容的提问来源于stack exchange,提问作者Waqas Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:40:23