我与mutipartite网络的工作,特别是在这种情况下,与四方之一。首先,在NetworkX似乎只有是可能的完全多的网络低谷nx.complete_multipartite_graph工作(),而不是与更普遍的多方者(纠正我,如果我错了,请)。如果需要,我可以开始查看igraph或其他Python包。如何在NetworkX或igraph中使用多重图形?
在James A. Foster's question启发,我创建一个类似于矿山网络的平局,当然在规模较小,并与它的一些特性。我仅使用此代码以图形方式查看,并帮助解释我想要执行的操作。
我使用了以下命名法: 第一和第二列形成“X二分网络”, 第二和第三列形成“Y二分网络”, 第三和第四列形成“Z二分网络”, 并且我将所有这些网络都放在单独的文件中。我希望他们能在短短一个多部分网络整合为这场平局:
(1)我应该如何着手呢?据我所知,我不能使用nx.compose()函数。
的一个问题,我觉得,至少在这段代码绘制它,是由于这样的事实,在我的实际网络的第1和第4列有相同的元素!因此,如果我在两列中使用相同的名称,则NetworkX解释对我无用,这就是为什么我在第4列中使用不同的数字。
(2)我应该怎么做?尽管具有相同的元素,但我需要指定两列在某种程度上是不同的。
该图形的一个重要信息是“临时有序的”,即相互作用按时间顺序从左到右发生,因此第一列和第四列之间的自循环被禁止,并且这些列对我来说是特别感兴趣的。
(3)我怎样才能提取第一和第四列之间的网络?例如,在这个小型网络中,节点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()
非常感谢您的帮助提前,
豪尔赫
谢谢你的邻居解决你的问题(3),这是相当聪明,它工作得很好。 – Jorge