Я работаю с сетями mutipartite, в частности в этом случае с четырехсторонним. Прежде всего, в NetworkX кажется, что можно работать с полными многопартийными сетями через nx.complete_multipartite_graph(), а не с более общими многочастными (поправьте меня, если я ошибаюсь, пожалуйста). Я могу начать смотреть на igraph или другой пакет Python, если это необходимо.Как работать с многочастными графами в NetworkX или igraph?
Вдохновленный в James A. Foster's question, я создаю ничью сети, подобной моей, в меньшем масштабе, конечно, и с некоторыми ее функциями. Я использую этот код только для того, чтобы увидеть его графически и как помочь объяснить, что я хочу делать.
Я использовал следующую номенклатуру: 1-й и 2-й колонна образует «двудольную сеть X», 2-й и 3-й колонна образует «двудольную сеть Y», 3 и 4 столбцов образуют «Z двудольной сеть», и у меня есть все эти сети в отдельных файлах. Я хотел бы, чтобы интегрировать их в только один многодольной сети, как это дро:
(1) Как я должен продолжать это? Насколько я понимаю, я не могу использовать функцию nx.compose().
Одна из проблем, которые я нахожу, по крайней мере, в этом коде для ее рисования, объясняется тем, что в моей реальной сети 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()
Большое спасибо за вашу помощь заранее,
Jorge
Спасибо вам, что это очень умный, и он работает хорошо. – Jorge