在NetworkX更新节点值中

时间:2014-03-21 10:25:38

标签: python networkx

我在NetworkX中制作了一个图表。在图中,保存了形状的一些(x,y)位置。我想在图形中保留形状识别脚本中的正常(x,y)位置,但是当我绘制图形时,我想在(x,高度-y)位置绘制它,其中高度是图像的高度。这是必要的,因为如果我用正常(x,y)位置绘制图形,则形状将一直显示。所以这是我写的代码:

#ap is the array containing the (x,y) positions of the shape. x=ap[0][0], y=ap[0][1] and so on.
pe = nx.Graph()
pe.add_node('p1', posxy=(ap[0][0], ap[0][1]))
pe.add_node('p2', posxy=(ap[1][0], ap[1][1]))
pe.add_node('p3', posxy=(ap[2][0], ap[2][1]))
pe.add_node('p4', posxy=(ap[3][0], ap[3][1]))
pe.add_node('p5', posxy=(ap[4][0], ap[4][1]))
pe.add_cycle(['p1','p2','p3','p4','p5'])
positions = nx.get_node_attributes(pe, 'posxy')
nx.draw(pe, positions, labels=positions, font_size=8, font_weight='bold', node_color='yellow', alpha=0.5)

当我尝试修改变量positions时,它不起作用。我尝试执行以下操作:height-'posxy'[1]仅更新y的{​​{1}}组件,但它不起作用。它返回此错误:posxy,因此我不知道如何更新节点的属性unsupported operand type(s) for -: 'int' and 'str'

我该怎么做?

任何帮助都是相关的。

1 个答案:

答案 0 :(得分:1)

表达式

height - 'posxy'[1]

评估为

height - 'o'

因此你看到了错误。

根据documentationpositions将是字典{node: posxy, ...}

posxy是一个元组,例如(1, 2),这是不可变的,因此您无法简单地分配其中一个值(例如posxy[1] = ...);你也会在这里得到一个错误:

TypeError: 'tuple' object does not support item assignment 

相反,处理所有这些,使用例如每个位置创建一个新的元组。字典理解:

positions = {k: (v[0], height - v[1]) for k, v in positions.items()}