簡體   English   中英

NetworkX中的標簽

[英]Labels in NetworkX

我的網絡比較復雜。

    Number of nodes: 2435
    Number of edges: 7497
    Average degree:   6.1577

我想向網絡添加標簽,這已經設法做到了,但是由於節點數量的原因,它看起來並不好。

帶有標簽的網絡 反正有可能獲得每五個標簽嗎? 這可能會使它更具可讀性。 我對6點鍾左右的怪異半圓的標簽特別感興趣。

或者,有一種方法可以繪制出具有最高中心度的節點和相關邊。

另一種方法是制作允許縮放的交互式圖形,我不知道該怎么做。

碼:

cast_1_tup = castdf[['cast_0','cast_1']].apply(tuple, axis=1)
cast_2_tup = castdf[['cast_0','cast_2']].apply(tuple, axis=1)
cast_3_tup = castdf[['cast_0','cast_3']].apply(tuple, axis=1)
cast_4_tup = castdf[['cast_0','cast_4']].apply(tuple, axis=1)
cast_5_tup = castdf[['cast_1','cast_2']].apply(tuple, axis=1)
cast_6_tup = castdf[['cast_1','cast_3']].apply(tuple, axis=1)
cast_7_tup = castdf[['cast_1','cast_4']].apply(tuple, axis=1)
cast_8_tup = castdf[['cast_2','cast_3']].apply(tuple, axis=1)
cast_9_tup = castdf[['cast_2','cast_4']].apply(tuple, axis=1)
cast_10_tup = castdf[['cast_3','cast_4']].apply(tuple, axis=1)

G = nx.Graph()
G.add_edges_from(cast_1_tup)
G.add_edges_from(cast_2_tup)
G.add_edges_from(cast_3_tup)
G.add_edges_from(cast_4_tup)
G.add_edges_from(cast_5_tup)
G.add_edges_from(cast_6_tup)
G.add_edges_from(cast_7_tup)
G.add_edges_from(cast_8_tup)
G.add_edges_from(cast_9_tup)
G.add_edges_from(cast_10_tup)

# write in UTF-8 encoding
fh = open('edgelist.utf-8', 'wb')
fh.write('# -*- coding: utf-8 -*-\n'.encode('utf-8'))  # encoding hint for emacs
nx.write_multiline_adjlist(G, fh, delimiter=',', encoding='utf-8')

# read and store in UTF-8
fh = open('edgelist.utf-8', 'rb')
H = nx.read_multiline_adjlist(fh, delimiter=',', encoding='utf-8')

plt.figure(figsize=(40,40))
plt.axis('off')
pos = nx.spring_layout(G, scale =2)
nx.draw_networkx(G, pos, cmap = plt.get_cmap('jet'), node_colour = values , node_size=80, with_labels=False)
for p in pos:  # raise text positions
    pos[p][1] += 0.04
nx.draw_networkx_labels(G, pos)
plt.show()

您可以通過分別繪制圖形元素而不是像現在那樣通過nx.draw_networkx一次繪制所有元素來實現一些要求。

具體來說,嘗試將圖形分為三個部分:

nx.draw_networkx_nodes(G, pos=pos)
nx.draw_networkx_edges(G, pos=pos)
nx.draw_networkx_labels(G, pos=pos, labels=l)

在這種情況下,通過為draw_networkx_labels函數指定labels參數,您可以控制要顯示的WHICH標簽。 這應該是由實際標簽值作為鍵的字典,並且它可以映射到您想要的任何內容-本身或其他內容。 似乎您不必全部指定它們,因此您可以以編程方式確定該詞典中包含的內容,並省略其余內容:

l = {'node-1':'node-1'}

因此,這應該只打印一個標簽,而不是其他標簽。

另外,非常簡單,由於您是通過plt.show()顯示圖形的,因此請注意底部的小放大類。 這樣一來,您可以根據需要放大多次。 如果足夠,那么您甚至無需執行任何操作。

暫無
暫無

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

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