2016-11-14 2 views
0

Ich versuche, einen Eckpunkt in Python mit igprah lybrari zu definieren. Wenn ich versuche, es als eine ganze Zahl zu definieren, gibt es kein Problem, aber wenn ich einen Eckpunkt als (x-Koordinate, y-Koordinate) definieren und eine Kante zwischen 2 so definierten Eckpunkten hinzufügen möchte, habe ich einen Fehler:definieren Vertex in Python iGraph von x, y Koordinaten

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

So habe ich versucht namedtupel

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

und dann versucht, zu schaffen i zwischen diesen verteces während Hinzufügen der Kante implizite Konvertierung zu verwenden, aber es funktioniert nicht.

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

Gibt es eine Möglichkeit, wie Vertex mit x, y-Koordinaten zu bestimmen und es in IGRAPH lybrary verwenden? Oder gibt es einen besseren Weg, mit dieser Art von Graphen zu arbeiten, wo meine Muskeln mit Koordinaten definiert werden müssen? Danke für Ihre Hilfe.

Antwort

0

igraph unterstützt nur ganze Zahlen oder Zeichenfolgen als Eckenkennungen. Wenn Sie zusätzliche Daten zu einem Stützpunkt speichern müssen, müssen Sie diese als Stützpunktattribute speichern. ZB:

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

Diese (1, 2) zum "coordinates" Vertexattribut von Vertex 0 und (3, 4) auf die zuweisen „Koordinaten“ Vertex-Attribut von Vertex 1. Je nachdem, was Sie erreichen wollen, könnte es besser sein, zwei zu verwenden, separate Scheitelpunktattribute (x und y), da diese beim Plotten des Diagramms automatisch als Layoutkoordinaten verwendet werden. Z.B .:

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

Es gibt auch eine Kurzschreibweise, die Werte eines Vertex-Attribut für alle Eckpunkte für die Zuordnung:

>>> 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) 
Verwandte Themen