簡體   English   中英

NetworkX:節點標簽是隨機繪制的

[英]NetworkX: Node labels are drawn randomly

因此,我想為每個節點(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()

您的代碼中存在一些問題:

  • 您分別創建節點和邊。 您認為是隨機的標簽與您在第一個循環中創建的節點相關聯(我想)。
  • 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 ,您就完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM