我在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'
。
我该怎么做?
任何帮助都是相关的。
答案 0 :(得分:1)
表达式
height - 'posxy'[1]
评估为
height - 'o'
因此你看到了错误。
根据documentation,positions
将是字典{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()}