Рисование раздела графа с помощью пакета networkX в Python

У меня есть объект графа G с узлами от 0 до n-1 и два списка L1 L2, которые являются разделом узлов G. Я хотел бы нарисовать G таким образом, чтобы узлы разделились на два блока: один относительно L1, а другой относительно L2. Целью изображения должно быть доказательство связи между L1 и L2. Можете ли вы помочь мне выполнить это задание?

Спасибо заранее.


person manifold    schedule 01.11.2014    source источник
comment
Что вы пробовали? Можете ли вы показать нам пример своего кода или того, что вы пытаетесь нарисовать?   -  person Aric    schedule 02.11.2014


Ответы (1)


Нарисуйте каждый граф отдельно и используйте непересекающееся произведение, чтобы сгенерировать новый граф, показывающий ребра:

введите здесь описание изображения

import networkx as nx

n1, n2 = 10, 10

# Define two random graphs
g1 = nx.gnm_random_graph(n1,20)
g2 = nx.gnm_random_graph(n2,20)
pos1 = nx.graphviz_layout(g1,prog='dot')
pos2 = nx.graphviz_layout(g2,prog='dot')

# Shift graph2
shift = 400
for key in pos2:
    pos2[key] = (pos2[key][0]+shift, pos2[key][1])

# Combine the graphs and remove all edges
g12 = nx.disjoint_union(g1,g2)
for i,j in g12.edges():
    g12.remove_edge(i,j)

# Add the conjoined edges
g12.add_edge(5, 7+n1)
g12.add_edge(2, 3+n1)
g12.add_edge(8, 7+n1)

# Set the new pos for g12
pos12 = pos1.copy()
for node in pos2:
    pos12[node+n2] = pos2[node]

# Show the results, make the conjoined edges darker

import pylab as plt
nx.draw_networkx(g1,pos=pos1,alpha=0.5)
nx.draw_networkx(g2,pos=pos2,alpha=0.5)
nx.draw_networkx_edges(g12,pos=pos12,width=5)
plt.axis('off')
plt.show()
person Hooked    schedule 26.11.2014