微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何固定 Networkx 中某些节点的位置?

如何解决如何固定 Networkx 中某些节点的位置?

我最近开始使用 Networkx 处理图表。 我正在尝试生成一个图形,其中包含一个起始层和一个结束层以及中间的一些节点。

例如,我在这里创建了 2 个图层,并使用 multipartite_layout() 来设置它们的位置:graph

但是,如果使用此解决方案,我无法在这 2 层之间添加节点而不将它们也放在层中。我只想将这些初始节点放在固定位置,然后能够添加新节点,这些节点将自己定位在层之间,因为它们连接到第一层或第二层(或连接到其中一个的节点)层)。

我还没有找到解决方案,因为我不能只选择一些节点的位置,我必须为所有节点都这样做,即使我需要修复一些节点并让其余节点选择自动定位。我试图寻找一些不同的布局,但我没有找到可以完成这项工作的特定布局。

关于如何做到这一点的任何想法?

解决方法

如果您想制作神经网络样式的图表,请尝试以下操作:

G = nx.complete_multipartite_graph(5,3,4)
pos = nx.multipartite_layout(G)

DG = G.to_directed()

edges_to_remove = []
for edge in DG.edges(data=True):
    from_node_subset = DG.nodes(data=True)[edge[0]]['subset']
    to_node_subset = DG.nodes(data=True)[edge[1]]['subset']
    if (to_node_subset - from_node_subset) != 1:
        edges_to_remove.append(edge)
        
DG.remove_edges_from(edges_to_remove)

nx.draw(DG,pos,with_labels=True)

哪些情节

neural_network_plot

如果你真的想手动定位节点,你可以做一个自动二部图,然后手动添加单个节点和边,确保给它们一个位置:

G = nx.complete_multipartite_graph(3,2)
pos = nx.multipartite_layout(G)

DG = G.to_directed()

edges_to_remove = []
for edge in DG.edges(data=True):
    from_node_subset = DG.nodes(data=True)[edge[0]]['subset']
    to_node_subset = DG.nodes(data=True)[edge[1]]['subset']
    if (to_node_subset - from_node_subset) != 1:
        edges_to_remove.append(edge)
        
DG.remove_edges_from(edges_to_remove)

DG.add_node(5)
DG.add_node(6)
DG.add_edge(5,4)
pos[5] = (0,0)
pos[6] = (0.25,0.25)

nx.draw(DG,with_labels=True)

给予

manually_placed_node_network

[注意上面的 DG.add_node(5) 是多余的,因为 DG.add_edge(5,4) 会自动将节点 5 添加到有向图中,如果它不存在的话。我添加它只是为了完整性——所以你知道你可以用它来添加断开连接的节点,就像 DG.add_node(6)。]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。