B.add_nodes_from(a, bipartite=1)
B.add_nodes_from(b, bipartite=0)
nx.draw(B, with_labels = True)
plt.savefig("graph.png")
Я получаю следующий рисунок. Как я могу сделать его похожим на двухсторонний граф?
B.add_nodes_from(a, bipartite=1)
B.add_nodes_from(b, bipartite=0)
nx.draw(B, with_labels = True)
plt.savefig("graph.png")
Я получаю следующий рисунок. Как я могу сделать его похожим на двухсторонний граф?
Вы можете сделать что-то подобное, чтобы нарисовать узлы из каждого раздела с определенной координатой x
:
X, Y = bipartite.sets(B)
pos = dict()
pos.update( (n, (1, i)) for i, n in enumerate(X) ) # put nodes from X at x=1
pos.update( (n, (2, i)) for i, n in enumerate(Y) ) # put nodes from Y at x=2
nx.draw(B, pos=pos)
plt.show()
Ключ создает dict
для параметра nx.draw
pos
, который:
Словарь с узлами как ключи и позиции как значения.
Смотрите документы.
Другой пример, объединяющий граф с двудольным графом:
G = nx.read_edgelist('file.txt', delimiter="\t")
aux = G.edges(data=True)
B = nx.Graph()
B.add_nodes_from(list(employees), bipartite=0)
B.add_nodes_from(list(movies), bipartite=1)
B.add_edges_from(aux)
%matplotlib notebook
import [matplotlib][1].pyplot as plt
plt.figure()
edges = B.edges()
print(edges)
X, Y = bipartite.sets(B)
pos = dict()
pos.update( (n, (1, i)) for i, n in enumerate(X) ) # put nodes from X at x=1
pos.update( (n, (2, i)) for i, n in enumerate(Y) ) # put nodes from Y at x=2
nx.draw_networkx(B, pos=pos, edges=edges)
plt.show()
NetworkX уже имеет функцию, чтобы сделать именно это.
Это называется networkx.drawing.layout.bipartite_layout
Вы используете его для генерации словаря, который подается в функции рисования, такие как nx.draw
через аргумент pos
следующим образом:
nx.draw_networkx(
B,
pos = nx.drawing.layout.bipartite_layout(B, B_first_partition_nodes),
width = edge_widths*5) # Or whatever other display options you like
Где B
- полный двудольный граф (представленный в виде обычного графа networkx), а B_first_partition_nodes
- узлы, которые вы хотите разместить в первом разделе.
Это создает словарь числовых позиций, который передается в аргумент pos
функции рисования. Вы также можете указать параметры макета, см. Главную страницу.