2017-09-04 4 views
2

次の情報でグラフを作成しようとしています。Python - ノード位置を持つグラフを描画する

n = 6 #number of nodes 
    V = [] 
    V=range(n)# list of vertices 
    print("vertices",V) 
    # Create n random points 

    random.seed(1) 
    points = [] 
    pos = [] 

    pos = {i:(random.randint(0,50),random.randint(0,100)) for i in V} 
    print("pos =", pos) 

pos = {0: (8, 72), 1: (48, 8), 2: (16, 15), 3: (31, 97), 4: (28, 60), 5: (41, 48)} 

は、私はPythonでmatplotlibのを使用して、これらのノードと(他のいくつかの計算で求めることができる)、いくつかのエッジとのグラフを描きたいので、これは私の位置を与えます。私は次のように試しました。しかし、動作しませんでした。

G_1 = nx.Graph() 
    nx.set_node_attributes(G_1,'pos',pos) 
    G_1.add_nodes_from(V) # V is the set of nodes and V =range(6) 


    for (u,v) in tempedgelist: 
     G_1.add_edge(v, u, capacity=1) # tempedgelist contains my edges as a list ... ex: tempedgelist = [[0, 2], [0, 3], [1, 2], [1, 4], [5, 3]] 


    nx.draw(G_1,pos, edge_labels=True) 
    plt.show() 

誰かが、私は今、適切なIDEを持っていないが、私はあなたのコードのスポット1つの問題はposが辞書でなければならないことである...これで

答えて

1

あなたはのためにposが必要です。 add_edges_from()を使用してノードとエッジの両方を設定できます。

import networkx as nx 
import random 

G_1 = nx.Graph() 
tempedgelist = [[0, 2], [0, 3], [1, 2], [1, 4], [5, 3]] 
G_1.add_edges_from(tempedgelist) 

n_nodes = 6 
pos = {i:(random.randint(0,50),random.randint(0,100)) for i in range(n_nodes)} 
nx.draw(G_1, pos, edge_labels=True) 

graph

注:別途pointspositionsを追跡する必要がある場合は、posからリストに書き込む:

points = [] 
positions = [] 
for i in pos: 
    points.append(pos[i]) 
    positions.append(i) 
    positions.append(pos[i]) 
2

私を助けてthe networkx doc here for setting node attributeを参照してくださいすることができそしてhere for drawing

この

import networkx as nx 
import matplotlib.pyplot as plt 

g= nx.Graph() 
pos = {0:(0,0), 1:(1,2)} 
g.add_nodes_from(range(2)) 
nx.set_node_attributes(g, 'pos', pos) 
g.add_edge(0, 1) 
nx.draw(g, pos, edge_labels=True) 
plt.show() 

はそれが動作するかどうか私に教えてください試してみてください。

+0

ありがとうございます、ありがとうございました。 – ccc

1

あなたは辞書の中に位置のリストを変換する必要があります。

pos = dict(zip(pos[::2],pos[1::2])) 

ちなみに、エッジリストから直接グラフを作成することもできます(ノードは自動的に追加されます)。

G1 = nx.Graph(tempedgelist) 
nx.set_node_attributes(G_1,'capacity',1) 
関連する問題