2017-02-24 17 views
2

私はMatlabからリングネットワークのエッジリストを取得しています。 NetworkXはこのリストを読み取り、循環レイアウトでグラフを描画します。マイエッジリストは、次のようになります。ペアの残りの部分は昇順でありながら、いくつかのペアが、そうで「1.50」、「2.50」であり、および、というNetworkXでグラフを表示するとき、エッジペアの順序(u、v)vs​​(v、u)は関係しますか?

['1,2', '1,3', '1,49', '1,50', '2,3', '2,4', '2,50', '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50'] 

お知らせ、「1,2」、 '1,3'、 '4,5'など。グラフを構築しても問題ありませんが、私は、円形のレイアウトでそれをプロットしたときに、私はこの取得が:右側に

​​

を、円は50回で終了している必要があります第48ノード、で終わります視覚的一貫性のためにノード。私が疑う理由は、注文ペア '1,50'、 '2,50'などです。プロット関数には何か基本的なものがありますか?それとも手動で注文ペアを変更する以外に何かできますか?プロットするために使用される命令は、次のとおりです。

f = open('Adj1.txt', 'r') 
read_data = f.read() 
f.close() 
edge_list = read_data.split(sep='\n') 
edge_list = edge_list[1:len(edge_list)-1] 
H = nx.parse_edgelist(edge_list,delimiter=',') 
.... 
nx.draw_circular(H,with_labels=False, node_size=25, node_color=node_color) 

答えて

1

あなたのグラフは単純無向グラフであるので、それは重要な順(u,v)が、あなたのエッジリストの順番ではありません。

import networkx as nx 
edge_list=['1,2', '1,3', '1,49', '1,50', '2,3', '2,4', '2,50', '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50'] 
H = nx.parse_edgelist(edge_list,delimiter=',') 
nx.draw_circular(H,with_labels=False, node_size=25) 

Bad:ネットワークノード50が早いリストに表示されている場合:どうやらnetworkxは、次のように 問題を証明することができる(方法で、理にかなって)edge_listで言及の順序に従って頂点をレイアウトします

networkx闘争。しかし、1,50とそれを所持しているリストの末尾に置くと、うまくプロットされます。あなたのグラフはを向けられている場合

edge_list=['1,2', '1,3', '2,3', '2,4', '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50','1,49', '1,50','2,50',] 
H = nx.parse_edgelist(edge_list,delimiter=',') 
nx.draw_circular(H,with_labels=False, node_size=25) 

Good

ため(u,v)(v,u)対コース物質のを行います。

+0

これをクリアしていただきありがとうございます。これは、エッジリストの正しい(必要な)順序を生成するために私のmatlabスクリプトを変更しなければならないことを意味します。 –

+0

喜んで助けてください。あなたはおそらく私よりよく知っているでしょう。グラフの理想的なレイアウトを見つけることの問題は、些細なことではありません(理想的な定義については正しい)? –

+0

バインドするノードの属性がある場合は間違いありません。それが理由で、私はときどき特定のレイアウトのために私自身の小さなスクリプトを作ることを好みます。確かに、彼らは "プロフェッショナル"とは見えませんが、目的を十分に果たしています。 –

関連する問題