通过x,y坐标在python iGraph中定义顶点

时间:2016-11-14 21:42:38

标签: python graph igraph

我正在尝试使用igprah lybrari在python中定义一个顶点。当我尝试将它定义为单个整数时没有问题,但如果我想将顶点定义为(x坐标,y坐标)并在这样定义的2个椎体之间添加边缘,那么我有一个错误:

TypeError: only numbers, vertex names or igraph.Vertex objects can be converted to vertex IDs

所以我尝试创建了namedtupel

Coordinates = namedtuple('Coordinates','x,y')
firstVertex = Coordinates(1,2)
secondVertex = Coordinates(3,4)

然后我尝试在添加这些椎骨之间的边缘时使用隐式转换,但它不起作用。

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Coordinates'

有没有办法如何用x,y坐标定义顶点并在igraph lybrary中使用它?或者有更好的方法如何使用这种图形,我需要用坐标定义我的椎骨?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

igraph仅支持整数或字符串作为顶点ID。如果需要存储与顶点相关的任何其他数据,则必须将其存储为顶点属性。 E.g:

>>> g = Graph(3)
>>> g.vs[0]["coordinates"] = (1, 2)
>>> g.vs[1]["coordinates"] = (3, 4)

这会将(1, 2)分配给顶点0的"coordinates"顶点属性,将(3, 4)分配给顶点1的“坐标”顶点属性。根据您想要实现的内容,它最好使用两个单独的顶点属性(xy),因为这些属性在绘制图形时会自动用作布局坐标。 E.g:

>>> g.vs[0]["x"], g.vs[0]["y"] = 1, 2

还有一个简写符号,用于为所有顶点分配顶点属性的值:

>>> g.vs["x"] = [1, 2, 3]
>>> g.vs["y"] = [2, 4, 6]
>>> g.vs[0]["x"], g.vs[0]["y"]
(1, 2)
>>> g.vs[1]["x"], g.vs[1]["y"]
(2, 4)
>>> g.vs[2]["x"], g.vs[2]["y"]
(3, 6)