具有以下代码:
...
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图中?
答案 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]