使用Python的networkX包绘制图分区

2 投票
1 回答
2335 浏览
提问于 2025-05-01 01:20

我有一个图形对象 G,里面有从 0n-1 的节点,还有两个列表 L1L2,这两个列表把 G 的节点分成了两部分。我想把 G 画出来,让节点分成两个块:一个是 L1 的,另一个是 L2 的。这样画的目的是为了突出 L1L2 之间的连接。你能帮我完成这个任务吗?

非常感谢!

暂无标签

1 个回答

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()

撰写回答