2016-11-14 15 views
0

igprah lybrariを使って、Pythonで頂点を定義しようとしています。私はそれを単一の整数として定義しようとすると問題はありませんが、頂点を(x座標、y座標)として定義し、このように定義された2つの頂点の間にエッジを追加したい場合、Pythonの頂点をx、y座標で定義する

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) 

を作成しようとした後、私はそれらvertecesの間にエッジを追加する時に暗黙的な変換を使用しようとしたが、それは仕事をdoesntの。

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

x、y座標で頂点を定義する方法はありますか?igraph lybraryで使用しますか?または、私は座標を定義した私の頂点を持っている必要があるこの種のグラフを扱うよりよい方法がありますか?ご協力いただきありがとうございます。

答えて

0

igraphは、整数または文字列のみを頂点IDとしてサポートします。頂点に関連する追加データを保存する必要がある場合は、頂点属性として保存する必要があります。例:

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

これは、頂点0の"coordinates"頂点属性に(1, 2)を割り当て、あなたが達成したいかに応じて、頂点1の頂点属性を「座標」に(3, 4)だろう、2を使用する方がよいかもしれません別の頂点属性(xおよびy)は、グラフをプロットするときにレイアウト座標として自動的に使用されるためです。例えば:簡略表記は、すべての頂点の頂点の属性の値を割り当てるためもあり

>>> 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) 
関連する問題