繁体   English   中英

networkx:从两个图形连接相同的节点

[英]networkx: connect the same nodes from two graphs

我正在使用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),但是我不知道如何在右侧绘制节点(color = blue,来自G1),在左侧绘制其他节点(color = red,从G2)。 所以我放弃了这种方法。

如果只想画一条连接两个节点的线,则只需用matplotlib画一条线,并确保zorder为低:

import matplotlib.pyplot as plt
x1, y1 = pos1[8]
x2, y2 = pos2[8]
plt.plot([x1, x2], [y1, y2], zorder=0)

好的,最后我决定使用nx.compose的方法,并且可以正常工作在命令中的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)

图像将变成这个 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM