NetworkX将spring_layout之后的节点添加到图中

时间:2019-10-10 14:55:36

标签: python networkx

具有以下代码:

  ...
  public Throwable(String message) {
    fillInStackTrace();
    detailMessage = message;
    System.out.println("################ my additional code ##############");
 }

如何将节点import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() G.add_nodes_from(range(1, 10)) G.add_edges_from([(1, 3), (2, 4), (3, 4), (2,6), (1, 2), (4, 9), (9, 1)]) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True) plt.show() G.add_node(10) nx.draw(G, pos, with_labels=True) # this gives the error plt.show() 添加到图中的任意位置? 我实际上遇到的错误是:

  

NetworkXError:节点10没有位置。

如何将新创建的节点包含在已经建立的spring_layout图中?

2 个答案:

答案 0 :(得分:4)

问题(正如其他人已经注意到的)是$content .= html_writer::div($chelper->get_category_formatted_description($coursecat)); 是为每个节点分配位置的字典。但是,添加节点后,它不会更新pos

鉴于所有其他节点的现有位置,以下内容将为新节点pos找到一个合适的位置。基本上,它再次调用10,但将所有现有节点保留在适当的位置。我已经将节点10连接到节点9。

spring_layout

答案 1 :(得分:3)

spring布局的输出是将节点映射到位置的字典 {nodeid:[x,y]}。要随机放置新节点,必须在pos词典中为其赋予随机位置。

这里是一个示例,该示例找到边界框,然后在内部某处拾取一个随机点。

import numpy as np

bounds = np.zeros((2,2)) # xy min, xymax

for pt in pos.values():
    bounds[0] = np.min([bounds[0],pt], axis=0) # compare point to bounds and take the lower value
    bounds[1] = np.max([bounds[1],pt], axis=0) # compare point to bounds and take the highest value

pos[10] = (bounds[1] - bounds[0]) * np.random.random(2)  + bounds[0]