Python 可以从NetworkX布局中可视化图形,如;“三月疯狂”;支架
我试图将python中的锦标赛定向图可视化为networkx对象。理想情况下,如果我能想象它类似于NCAA经典的“三月疯狂”括号,那就太好了。到目前为止,我最接近的是使用点布局,但它不是很直观,看起来根本不像括号 我有一个单独的图形,但可以将其分解为4个子图(三月疯狂的设置方式),如果这样可以使可视化效果更好的话 下面是我正在寻找的布局示例(或其附近的内容)Python 可以从NetworkX布局中可视化图形,如;“三月疯狂”;支架,python,graph,graphviz,networkx,visualize,Python,Graph,Graphviz,Networkx,Visualize,我试图将python中的锦标赛定向图可视化为networkx对象。理想情况下,如果我能想象它类似于NCAA经典的“三月疯狂”括号,那就太好了。到目前为止,我最接近的是使用点布局,但它不是很直观,看起来根本不像括号 我有一个单独的图形,但可以将其分解为4个子图(三月疯狂的设置方式),如果这样可以使可视化效果更好的话 下面是我正在寻找的布局示例(或其附近的内容) (来源:) 这是我到目前为止得到的,它需要改进,但你会认为它是一个糟糕的图形表示。 下面是我现在用来构建图形并将其输出到图像的一段代码
(来源:) 这是我到目前为止得到的,它需要改进,但你会认为它是一个糟糕的图形表示。 下面是我现在用来构建图形并将其输出到图像的一段代码:
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)
只需要自己定义节点位置,而不是使用内置代码,这将非常简单。@Joel-我该怎么做,或者在哪里传递它们?我假设你在graphviz中谈论“点列表”,但我似乎找不到一个好的例子来具体说明如何实现这一点。也许我的google fu不太靠谱。看看
pos
被定义为什么(打印出来)-它是一本字典,给出了每个节点的位置。所以你可以定义它。这仍然需要一些工作,但不会有任何内置的东西来完成这样一个专门的安排。只需自己定义节点位置而不是使用内置代码就相当简单了。@Joel-我该如何做,或者在哪里传递它们?我假设你在graphviz中谈论“点列表”,但我似乎找不到一个好的例子来具体说明如何实现这一点。也许我的google fu不太靠谱。看看pos
被定义为什么(打印出来)-它是一本字典,给出了每个节点的位置。所以你可以定义它。这仍然需要一些工作,但不会有任何内置的东西来做这样一个专门的安排。