Networkx节点标签顺序错误

时间:2019-02-18 12:44:57

标签: python matplotlib graph networkx

我用Python编写了绘制图形的代码。输入看起来像这样:

  1. 顶点数。
  2. 顶点的第一坐标。
  3. 同一顶点顶点的第二个坐标。
  4. 如果有多个顶点,则重复(2)和(3)。每个数字都必须在换行符上。

图形绘制正确,但是每个节点上的标签错误。

示例输入:

this.get(…)

请在每个数字的换行符上输入输入!!!

示例输出:

Correct output

我的输出(错误的一个):

wrong output(the current one)

我的代码:

10
1
3
3
4
1
2
4
2
3
2
2
6
2
5
6
7
5
8
7
8
4

2 个答案:

答案 0 :(得分:2)

在第一次引用节点时,networkx会自动添加它们。如果从C-> B然后是F-> A绘制一条边,则将按照该顺序创建节点(C,B,F,A)。但是,您的labelmap假设它们是数字顺序的。

如果您仅使用以下标签,则将在节点上正确打印节点标签:

nx.draw(G, with_labels=True)

或者您可以在添加节点时跟踪节点以存储订单,例如

nodes = []
for z in range(0, ver):
    x = int(input())
    y = int(input())
    G.add_edge(x,y)

    if x not in nodes:
        nodes.append(x)
    if y not in nodes:
        nodes.append(y)

labelmap = dict(zip(nodes, nodes))

使用这种方法,您还可以根据需要格式化/更改标签。

答案 1 :(得分:0)

正如我在networkx中的注释标签中所述,标签是自动分配的:

import networkx as nx
from string import ascii_uppercase

G = nx.Graph()

edges = list(zip(ascii_uppercase, ascii_uppercase[1:]))
print(edges)

for i, j in edges:
    G.add_edge(i, j)

# jupyter notebook
%matplotlib inline
nx.draw(G, with_labels=True)

输出:

[('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F'), ('F', 'G'), ('G', 'H'), ('H', 'I'), ('I', 'J'), ('J', 'K'), ('K', 'L'), ('L', 'M'), ('M', 'N'), ('N', 'O'), ('O', 'P'), ('P', 'Q'), ('Q', 'R'), ('R', 'S'), ('S', 'T'), ('T', 'U'), ('U', 'V'), ('V', 'W'), ('W', 'X'), ('X', 'Y'), ('Y', 'Z')]

Graph

networkx中的默认节点/顶点具有整数作为标签:

G = nx.path_graph(15)
print(G.edges())

%matplotlib inline
nx.draw(G, with_labels=True)

输出:

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14)]

Graph