前提・実現したいこと
初めて、質問させて頂きます。
現在、PythonのNetworkxを用いて、ネットワークグラフを作成しています。
ノードとエッジの両方を表示させて、同じノード位置で画像を出力したいです。
発生している問題・エラーメッセージ
ノードの表示のみでは、ノード位置は固定されるが、エッジを描画するとノード位置が変わってしまいます。
以下の画像(2枚)は、異なる入力による出力結果になります。この二枚を重ね合わせて比較したいのですが、ノード位置がずれてしまいます。
恐らく、エッジ表示によるノード間距離が変わってしまうのが、原因だと思ってますが、解決策が思いつきません。
プログラム上では、ノードの位置を固定していて、エッジ表示をやめたらノード位置が固定され、重ね合わせて比較できます。
該当のソースコード
Python
1import networkx as nx 2from networkx.drawing.nx_pydot import write_dot 3import matplotlib.pyplot as plt 4import numpy as np 5 6node_225 = [] 7for r in range(225): 8 node_225.append(r+1) #ノード用のリスト作成 9 10#グラフの作成 11 12Graph = nx.DiGraph() #空のグラフを作成 13Graph.add_nodes_from(node_225) #ノード格納 14 15 16pos2 = { 17 g+1:(((3840/15)*(g%15)+128),((2160/15)*((int(((225-(g+1))/15)))))+216) #g+1がノード番号 18 for g in range(225) 19 } #ノードの位置固定したい 20 21#描画処理 22plt.figure(dpi = 100,figsize=(38.4,21.6)) #3840*2160の画像出力したい 23 24Graph.add_weighted_edges_from(omomi_all) #重み付きエッジの登録 25edge_labels = {(i, j): w['weight'] for i, j, w in Graph.edges(data=True)} #'weight'っていう文字を削除とedge_labelsの作成 26#edge_width = [ d['weight']*1 for (u,v,d) in Graph.edges(data=True)] #設定した重みの値に比例して大きさを設定 27 28nx.draw_networkx_edge_labels(Graph,pos2,label_pos=0.3, edge_labels=edge_labels)#エッジの重みを表示する 29 30nx.draw(Graph, with_labels=True,pos=pos2,node_size = node_1_225)#pos2でノード位置固定 31 32plt.show() 33
#上の画像のデータ node_1_225の中身 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 3, 88, 378, 200, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 53, 167, 578, 255, 334, 89, 1, 0, 0, 0, 0, 0, 0, 1, 391, 30, 283, 1496, 450, 112, 4, 1, 0, 0, 0, 0, 0, 0, 0, 386, 5, 59, 269, 128, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 375, 43, 4, 4, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 61, 64, 3, 1, 24, 30, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 13, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 27, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 14, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0] omomi_allの中身 [エッジの始点ノード,終点ノード,重み] [[202, 187, 0.1], [187, 202, 0.1], [201, 202, 0.1], [188, 187, 0.1], [214, 215, 0.1], [215, 214, 0.1], [114, 130, 3.5], [99, 84, 0.1], [100, 114, 0.25], [115, 114, 0.25], [84, 83, 0.1], [98, 113, 0.25], [85, 100, 0.1], [97, 112, 0.25], [83, 84, 0.1], [113, 128, 0.5], [112, 97, 0.25], [109, 112, 0.1], [116, 114, 0.1], [111, 112, 0.1], [127, 142, 0.1], [156, 142, 0.1], [157, 142, 0.1], [172, 142, 0.1], [142, 127, 0.25], [125, 126, 0.1], [110, 112, 0.1], [67, 188, 0.1], [143, 144, 0.1], [129, 144, 0.25], [130, 115, 0.1], [95, 80, 0.1], [80, 110, 0.1], [96, 111, 0.1], [82, 83, 0.1], [131, 101, 0.1], [101, 116, 0.1], [128, 113, 0.5], [189, 217, 0.1], [217, 203, 0.1], [203, 158, 0.1], [158, 143, 0.1], [159, 144, 0.1], [173, 220, 0.1], [220, 112, 0.1], [218, 158, 0.1], [144, 129, 0.25], [145, 160, 0.1], [146, 145, 0.1], [161, 146, 0.1], [160, 145, 0.1], [147, 162, 0.1], [162, 161, 0.1], [141, 142, 0.1], [126, 127, 0.1], [117, 100, 0.1], [69, 68, 0.1], [68, 83, 0.1], [102, 100, 0.1], [81, 82, 0.1]]
#下の画像のデータ node_1_225の中身 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 31, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 141, 124, 269, 504, 15, 2, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2034, 61, 2013, 464, 126, 2, 1, 0, 0, 0, 0, 0, 0, 0, 143, 2039, 354, 1421, 385, 105, 145, 1, 0, 0, 0, 0, 0, 0, 0, 1, 137, 133, 472, 114, 40, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 22, 394, 2, 6, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 6, 2, 23, 41, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] omomi_allの中身 [エッジの始点ノード,終点ノード,重み] [[97, 96, 0.1], [82, 83, 0.1], [112, 113, 1.5], [113, 128, 0.5], [98, 114, 0.5], [96, 97, 0.1], [111, 112, 0.25], [114, 98, 0.5], [99, 114, 0.5], [84, 114, 0.1], [115, 114, 0.1], [100, 99, 0.1], [130, 115, 0.1], [129, 114, 0.1], [81, 82, 0.1], [95, 112, 0.1], [128, 112, 0.5], [127, 126, 0.5], [94, 111, 0.1], [126, 112, 0.5], [110, 112, 0.1], [125, 112, 0.1], [204, 189, 0.1], [205, 204, 0.1], [189, 204, 0.1], [188, 187, 0.1], [187, 188, 0.1], [116, 101, 0.1], [101, 117, 0.1], [117, 116, 0.1], [102, 116, 0.1], [159, 160, 0.1], [144, 159, 0.1], [143, 144, 0.1], [142, 127, 0.25], [141, 142, 0.1], [156, 141, 0.1], [157, 143, 0.1], [173, 158, 0.1], [158, 143, 0.1], [140, 142, 0.1], [155, 142, 0.1], [145, 144, 0.1], [160, 144, 0.1], [161, 176, 0.1], [146, 161, 0.1], [176, 177, 0.1], [177, 161, 0.1], [175, 159, 0.1], [162, 161, 0.1], [132, 130, 0.1], [131, 130, 0.1], [83, 98, 0.25], [68, 53, 0.1], [69, 83, 0.1], [70, 81, 0.1], [86, 85, 0.1], [85, 84, 0.1], [53, 68, 0.1], [52, 53, 0.1], [67, 66, 0.1], [66, 81, 0.1], [79, 82, 0.1]]
試したこと
該当エラーに関する記事を調べたが、出てこなかった。
ノード間距離の調整を試みたが、出来なかった。
補足情報(FW/ツールのバージョンなど)
環境
Jupiternotebook 6.0.3
Python 3.7.6
Networkx 2.4
回答1件
あなたの回答
tips
プレビュー