我用的是多党派网络,特别是在这个例子中是四方网络。首先,在NetworkX中,似乎只有在完整的多部分网络中才能工作nx.完整的多部分图(),而不是更一般的多个部分(如果我错了请纠正我)。如果有必要,我可以开始查看igraph或其他Python包。在
受James A. Foster's question的启发,我画了一张与我的类似的网络图,当然是在更小的范围内,并带有它的一些特性。我使用这段代码只是为了图形化地查看它,并帮助解释我想做什么。在
我使用了以下术语: 第1列和第2列组成“X二部网络”, 第2列和第3列组成“Y二部网络”, 第3列和第4列组成“Z二部网络”, 我把这些网络都放在单独的文件里。我想将它们集成到一个多部分网络中,如图所示:
(1)我该如何处理?据我所知,我不能用nx.合成()功能。在
我发现的一个问题,至少在绘制它的代码中,是因为在我真正的网络中,第1列和第4列有相同的元素!所以,如果我在两列中使用相同的名称,NetworkX解释对我来说就没有用了,这就是为什么我在第4列中使用了不同的数字。在
(2)我该怎么办?我需要指定,尽管有相同的元素,但这两个列在某种程度上是不同的。在
一个重要的信息是这张图是“临时有序的”,也就是说,相互作用是按时间顺序从左到右发生的,因此第1列和第4列之间的自循环是被禁止的,这几列是我特别感兴趣的。在
(3)如何提取第1列和第4列之间的网络?例如,在这个小型网络中,节点6与11和14相连,节点11当然与1、2和6相连。在
import networkx as nx
import matplotlib.pyplot as plt
def position_QuadriPartiteGraph(Graph, Parts):
uPos = {}
vPos = {}
for index1, agentType in enumerate(Parts):
uPos[agentType] = index1
QG = nx.Graph()
QG.add_nodes_from([1,2,3,4,5,6,7], agentType='alfa')
QG.add_nodes_from(['a','b','c'], agentType='beta')
QG.add_nodes_from(['A','B','C','D','E','F'], agentType='gamma')
QG.add_nodes_from([8,9,10,11,12,13,14], agentType='delta')
myEdges = [(1,'a'), # beginning of bipartite network X
(1,'b'), # X
(2,'b'), # X
(3,'a'), # X
(4,'a'), # X
(5,'a'), # X
(6,'c'), # X
(7,'a'), # end of bipartite network X
('a','A'), # beginning of bipartite network Y
('a','B'), # Y
('a','E'), # Y
('b','B'), # Y
('b','C'), # Y
('b','D'), # Y
('c','F'), # end of bipartite network Y
('A',8), # beginning of bipartite network Z
('A',9), # Z
('B',9), # Z
('B',13), # Z
('C',10), # Z
('C',11), # Z
('C',12), # Z
('D',12), # Z
('E',13), # Z
('F', 11), # Z
('F', 14)] # end of bipartite network Z
[QG.add_edge(u, v) for u, v in myEdges]
nx.draw(QG, pos=position_QuadriPartiteGraph(QG, ['alfa', 'beta', 'gamma', 'delta']), with_labels=True)
plt.savefig("multipartite_graph.png")
plt.show()
非常感谢您的帮助
豪尔赫
我的第一个建议是将这三个网络分别作为}。另外,让
g1
、g2
和{g3
标签与g1
标签不同,比如说,使它们为负数(这解决了问题(2))。然后,您可以通过逐步查看g2中g1代理的邻居、g3中的g2代理等来解决您的问题(3):相关问题 更多 >
编程相关推荐