簡體   English   中英

簡化 networkx 節點標簽

[英]Simplify networkx node labels

%matplotlib inline
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node('abc@gmail.com')
nx.draw(G, with_labels=True)
plt.show()

輸出圖是

在此處輸入圖像描述

我想要的是

在此處輸入圖像描述

我在 csv 文件中有數千條從 person@email.com 到 another@email.com 的電子郵件記錄,我使用G.add_node(email_address)G.add_edge(from, to)構建 G。我想保留整個電子郵件Graph G 中的地址,但以簡化的字符串顯示。

networkx有一個名為relabel_nodes的方法,它接受一個圖 ( G )、一個mapping (重新標記規則)並返回一個帶有重新標記節點的新圖 ( new_G )。

也就是說,在你的情況下:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node('abc@gmail.com')
mapping = {
   'abc@gmail.com': 'abc'
}
relabeled_G = nx.relabel_nodes(G,mapping)
nx.draw(relabeled_G, with_labels=True)
plt.show()

這樣你就可以保持G的完整性並簡化標簽。

您可以選擇就地修改標簽,而無需新副本,在這種情況下,您只需調用G = nx.relabel_nodes(G, mapping, copy=False)

如果您事先不知道電子郵件地址,可以將relabel_nodes傳遞給函數,如下所示:

G = nx.relabel_nodes(G, lambda email: email.split("@")[0], copy=False)
import networkx as nx
import matplotlib.pyplot as plt  

G = nx.Graph()
G.add_node('abc@gmail.com')

mapping = {'abc@gmail.com':'abc' }
G=nx.relabel_nodes(G, mapping)

nx.draw(G, with_labels=True)
plt.rcParams["figure.figsize"] = [10,10]
plt.axis('off')
plt.show()

暫無
暫無

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

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