我正在使用python,NetworkX和Matplotlib,我想从两个图中连接相同的节点 例如 两个图:G1和G2
G1=nx.Graph()
G2=nx.Graph()
G1.add_nodes_from([0,1,2,3,9,8,10,11,12,13,14])
G2.add_nodes_from([4,5,6,7,8])
G1.add_edges_from([(0,1),(2,3),(2,9),(2,12),(1,9),(10,8),(8,11),(8,13),(8,14)])
G2.add_edges_from([(4,5),(6,7),(4,8)])
pos1=nx.spring_layout(G1,k=0.2,iterations=30)
pos2=nx.spring_layout(G2)
for k,v in pos2.items():
v[0] = v[0] +3
nx.draw(G1,pos1,with_labels=True,node_color='b')
nx.draw(G2,pos2,with_labels=True)
图像是这样的:
我的问题是如何从两个图表连接相同的节点? (节点" 8"在两者中)
我想要 节点" 8"(蓝色)链接节点" 8"(红色)。
我还使用了G3 = nx.compos(G1,G2), 但我不知道如何绘制右侧的节点(颜色=蓝色,G1)和左侧的其他节点(颜色=红色,来自G2)。 所以我放弃了这种方法。
答案 0 :(得分:0)
如果你只是想绘制一条连接两个节点的线,那么只需用matplotlib绘制一条线,并确保zorder为低:
import matplotlib.pyplot as plt
x1, y1 = pos1[8]
x2, y2 = pos2[8]
plt.plot([x1, x2], [y1, y2], zorder=0)
答案 1 :(得分:0)
好的,最后我决定使用nx.compose和It'的方法。工作 在命令行pos2之后,添加:
D_1=G2.nodes()
G3=nx.compose(G1,G2)
pos3= nx.spring_layout(G3)
for k, v in pos3.items():
if k in D_1:
v[0] = v[0] +10
nx.draw_networkx_nodes(G3,pos3,nodelist=G1.nodes(),node_color='b')
nx.draw_networkx_nodes(G3,pos3,nodelist=G2.nodes())
nx.draw_networkx_edges(G3,pos3,edgelist=G1.edges())
nx.draw_networkx_edges(G3,pos3,edgelist=G2.edges())
nx.draw_networkx_labels(G3,pos3)