使用networkx的节点标签

15 投票
1 回答
38308 浏览
提问于 2025-04-17 19:52

我正在根据一系列Y值来创建一个图,这些Y值存储在curveSeq中。(X值会自动编号:0, 1, 2...)

比如说,如果curveSeq = [10,20,30],那么我的图上会有这些点:

<0,10>, <1,20>, <2,30>.

我在同一个nx.Graph上绘制一系列图,以便把所有内容放在一张图里展示。

我遇到的问题是:

  • 每个节点都显示它的位置。比如说,位于<0,10>的节点会显示它的标签,但我不知道怎么去掉这个标签。
  • 有些特定的节点我想添加标签,但我也不知道该怎么做。

例如,对于这个序列:

[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1]

得到的图是:

graph

代码是:

for point in curveSeq:
                cur_point = point
                #assert len(cur_point) == 2
                if prev_point is not None:
                    # Calculate the distance between the nodes with the Pythagorean
                    # theorem
                    b = cur_point[1] - prev_point[1]
                    c = cur_point[0] - prev_point[0]
                    a = math.sqrt(b ** 2 + c ** 2)
                    G.add_edge(cur_point, prev_point, weight=a)
                G.add_node(cur_point)
                pos[cur_point] = cur_point
                prev_point = cur_point
            #key:
            G.add_node((curve+1,-1))
            pos[(curve+1,-1)] = (curve+1,-1)

            nx.draw(G, pos=pos, node_color = colors[curve],node_size=80)
            nx.draw_networkx_edges(G,pos=pos,alpha=0.5,width=8,edge_color=colors[curve])

     plt.savefig(currIteration+'.png')

1 个回答

26

你可以在使用 networkx.draw() 的时候加上 with_labels=False 这个参数,这样就不会显示标签了,比如:

networkx.draw(G, pos=pos, node_color=colors[curve],
    node_size=80, with_labels=False)

然后你可以用下面的方式来绘制特定的标签:

networkx.draw_networkx_labels(G,pos, labels)

这里的 labels 是一个字典,用来把节点的 ID 和标签对应起来。

可以看看这个例子: https://networkx.org/documentation/stable/auto_examples/drawing/plot_labels_and_colors.html

撰写回答