所以我想为每个节点(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()
答案 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
必须具有两个必填列:source
和target
。如有必要,请预处理df
。添加weight
,您就完成了。