繁体   English   中英

NetworkX图:使用有序列表创建节点

[英]NetworkX graph: creating nodes with ordered list

我对图完全陌生。 我有一个213 X 213距离矩阵。 我一直在尝试使用网络可视化距离矩阵,我的想法是,在绘制图形时,相距较远的节点将显示为单独的群集。 所以我正在创建一个带有代表列索引的节点的图形。 我需要跟踪节点以便以后对其进行标记。 我需要按一定顺序添加边,因此需要跟踪节点及其标签。

这是代码:

import networkx as nx
G = nx.Graph()
G.add_nodes_from(time_pres) ##time_pres is the list of labels that I want specific node to have

 for i in range(212):
    for j in range(i+1, 212):
        color = ['green' if j == i+1 else 'red'][0]
        edges.append((i,j, dist[i,j], 'green')) ##This thing requires allocation of distance as per the order in dist matrirx
        G.add_edge(i,j, dist = dist[i,j], color = 'green')

我现在进行仪式的方式是,将id分配给节点的数字不是time_pres中标签的索引。

感谢您的帮助。 谢谢!!

我可以回答您似乎要问的问题,但这并不能解决您的麻烦。 具体来说,我将告诉您您出了什么问题。

因此,我们假设变量time_pres定义如下

time_pres = [('person1', '1878'), ('person2', '1879'), etc)]

然后,

G.add_nodes_from(time_pres)

创建带有标签('person1', '1878')('person2', '1879')等的节点。这些节点保存在字典中,并使用键来标记节点的标签并为与每个节点相关的任何其他属性取值节点。 就您而言,您没有属性。 您也可以从联机手册中看到此内容,或者键入help(G.add_nodes_from)

您甚至可以通过键入以下任一行来查看节点的标签。

G.nodes()        # either this
G.node.keys()    # or this

这将打印标签列表,但是由于它们来自字典,因此它们的顺序可能与time_pres 您可以通过节点的标签来引用它们。 他们没有其他ID号或其他任何编号。

现在,添加一条边缘。 手册指出,如果两个节点中的任何一个不在图中,则将添加它们。 所以,当你这样做

G.add_edge(i, j, dist = dist[i,j], color = 'green')

其中, ij是数字,因为它们在图形标签中尚不存在,所以将它们添加到图形中。 因此,最终要添加节点ij以及它们之间的边缘。 相反,您想做

G.add_edge(time_pres[i], time_pres[j], dist = dist[i,j], color = 'green')

这将在节点time_pres[i]time_pres[j]之间添加一条边。 据我了解,这是您的目标。


但是,您似乎希望在绘制图形时,节点time_pres[i]time_pres[j]之间的距离将由G.add_edge() dist=dist[i,j]属性决定。 实际上,节点的位置是由保持该节点的x和y位置的元组决定的。 nx.draw()手册中获取。

pos :字典,可选

以节点为键,位置为值的字典。 如果未指定,将计算弹簧布局位置。 有关计算节点位置的功能,请参见networkx.layout。

如果您未定义节点位置,则会随机生成它们。 在您的情况下,您将需要像这样的字典

pos = {('person1', '1878'): (23, 10),
       ('person2', '1879'): (18, 11),
       etc}

然后,节点ij之间的坐标将导致等于dist[i,j]的距离。 您将必须弄清楚这些坐标,但是由于您尚未确切说明如何得出矩阵dist ,因此我对此一无所知。

暂无
暂无

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

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