NetworkX:节点标签是随机绘制的

时间:2018-12-22 14:32:38

标签: python matplotlib networkx

所以我想为每个节点(1-20)绘制标签,但是不知何故,这些标签只是随机地在图形上绘制(下面的检查屏幕)。

network = nx.DiGraph()
counter = 0
for i in range(1,21):
    network.add_node(i, label = str(i))
with open('mreza.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';', quotechar='|')
    for row in reader:
        for item in row:
            item = item.strip('(').strip(')').split(',')
            startVertex = int(item[0])
            endVertex = int(item[1])
            network.add_weighted_edges_from([(startVertex, endVertex, matchingArray[counter])])
            counter = counter + 1
pos=nx.spring_layout(network)
nx.draw(network)
labels = nx.draw_networkx_labels(network,pos,font_size=10)
plt.show()

nan

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题:

  • 您分别创建节点和边。您认为是随机的标签与您在第一个循环中创建的节点相关联(我想)。
  • draw可以带有额外的参数来调用以绘制标签,即nx.draw(G, pos=pos, with_labels=True, font_size=10)
  • 应该给
  • add_weighted_edges_from提供一个边缘容器。您正在滥用此功能来添加边。如果您坚持循环,请考虑使用add_edge

考虑到您从csv加载数据,我根本不会陷入循环。相反,我将数据加载到pandas数据框中,然后像这样使用from_pandas_edgelist

import pandas as pd
import networkx as nx

df = pd.read_csv('mreza.csv')
G = nx.from_pandas_edgelist(df, create_using=nx.DiGraph)
pos = nx.spring_layout(G)
nx.set_node_attributes(G, pos, 'pos')

请注意,您的df必须具有两个必填列:sourcetarget。如有必要,请预处理df。添加weight,您就完成了。