Python にあるトーナメント有向グラフを networkx オブジェクトとして視覚化しようとしています。理想的には、古典的な NCAA の「マーチ マッドネス」ブラケットと同じように視覚化できれば素晴らしいと思います。これまでで最も近いのは、ドット レイアウトを使用することですが、これはあまり直感的ではなく、ブラケットのようにはまったく見えません。
私は単一のグラフを持っていますが、視覚化が改善されれば、それを 4 つのサブグラフに分割できます (行進の狂気の設定方法)。
これが私が探しているレイアウトの例です (またはそれに近いもの)
(ソース: shorebranding.com )
これは私がこれまでに得たものです。改良が必要ですが、グラフの表現が貧弱であることがわかります。
グラフを作成して画像に出力するために現在使用しているコードの一部を次に示します。
def buildTourneyGraph(games,analysisYear):
MG=nx.DiGraph()
#for idx, gm in enumerate(games): # Iterate through rows
for gm in games: # Iterate through rows
#pp.pprint(gm)
if gm["academicYear".upper()] == int(analysisYear):
#add the two team nodes
MG.add_node(gm["winner".upper()])
MG.add_node(gm["loser".upper()])
MG.add_edge(gm["loser".upper()], gm["winner".upper()], weight=gm["margin".upper()] , round=gm["round".upper()])
#Draw a graph and save it to a PNG file
#nx.draw_spectral(MG)
#nx.draw_graphviz(MG)
#nx.draw_shell(MG)
# same layout using matplotlib with labels
plt.title("NCAA Tourney for " + str(analysisYear))
pos=nx.graphviz_layout(MG,prog='dot')
nx.draw(MG,pos,with_labels=True,arrows=True,node_size=20,node_color="red")
outputGraphFile = os.path.expanduser('C:/Users/myUser/Documents/graph_tourney_' + str(analysisYear) + '.png')
plt.savefig(outputGraphFile)