繁体   English   中英

NetworkX 中用于大量节点的二分图

[英]Bipartite graph in NetworkX for LARGE amount of nodes

我正在尝试创建某些节点的二分,对于少量它看起来非常好:

大约 30 个节点的图像

不幸的是,对于像这样的更多节点,情况并非如此:

更多节点的图像

我用于确定每个节点的 position 的代码如下所示:

pos = {}
pos[SOURCE_STRING] = (0, width/2)
row = 0
for arr in left_side.keys():
    pos[str(arr).replace(" ","")]=(NODE_SIZE, row)
    row += NODE_SIZE
row = 0
for arr in right_side.keys():
    pos[str(arr).replace(" ","")]=(2*NODE_SIZE,row)
    row += NODE_SIZE
pos[SINK_STRING] = (3*NODE_SIZE, width/2)
return pos

然后我将它提供给DiGraph class:

G = nx.DiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges, len=1)
nx.draw(G, pos=pos ,node_shape = "s", with_labels = True,node_size=NODE_SIZE)

这没有多大意义,因为它们应该彼此保持相同的距离,因为NODE_SIZE是恒定的,对于程序的 rest 不会改变。

按照这个线程:

NetworkX 中的二分图

也没有帮到我。

可以对此做些什么吗?

编辑(按照 Paul Brodersen 建议使用 netGraph:

使用此文档: netgraph doc

并且仍然得到了一些相同的结果,例如: netgraph try

使用边缘和不同的位置,也使用节点大小,但没有成功。

代码:

netgraph.Graph(edges, node_layout='bipartite', node_labels=True)
plt.show()

在您的 netgraph 调用中,您不会更改节点大小。 我对 30 个节点的建议:

在此处输入图像描述

import numpy as np
import matplotlib.pyplot as plt

from netgraph import Graph

edges = np.vstack([np.random.randint(0, 15, 60),
                   np.random.randint(16, 30, 60)]).T

Graph(edges, node_layout='bipartite', node_size=0.5, node_labels=True, node_label_offset=0.1, edge_width=0.1)
plt.show()

有 100 个节点:

在此处输入图像描述

import numpy as np
import matplotlib.pyplot as plt

from netgraph import Graph

edges = np.vstack([np.random.randint(0, 50, 200),
                   np.random.randint(51, 100, 200)]).T

Graph(edges, node_layout='bipartite', node_size=0.5, node_labels=True, node_label_offset=0.1, edge_width=0.1)
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM