簡體   English   中英

如何使用networkx繪制子圖

[英]How to draw subgraph using networkx

我嘗試根據節點名稱列表從networkx中的karate_club_graph繪制子圖但是失敗了。 怎么能像我想要展示的那樣繪制子圖?

import networkx as nx
from matplotlib import pylab as pl

G = nx.karate_club_graph()
res = [0,1,2,3,4,5]
new_nodes = []
for n in G.nodes(data=True):
  if n[0] in res:
    new_nodes.append(n)

k = G.subgraph(new_nodes)
pos = nx.spring_layout(k)

pl.figure()
nx.draw(k, pos=pos)
pl.show()

您遇到的問題是您的子圖命令告訴它創建一個帶有nodelist的子圖,其中每個元素不僅僅是節點名,還有關於該節點名的數據。 命令G.subgraph只需要節點名稱列表。

解決這個問題的最簡單方法就是

k = G.subgraph(res)

即使res中的某些節點不在G ,它也能工作。

我將做這個改變,並通過在繪圖中添加一個額外的子圖來展示如何使用一致的位置繪制幾次。 它將繪制您的k ,然后繪制由不在k的所有節點組成的子圖。 請注意,由於subgraph工作方式,兩者之間不存在任何邊。

import networkx as nx
from matplotlib import pylab as pl

G = nx.karate_club_graph()
res = [0,1,2,3,4,5, 'parrot'] #I've added 'parrot', a node that's not in G
                              #just to demonstrate that G.subgraph is okay
                              #with nodes not in G.    
pos = nx.spring_layout(G)  #setting the positions with respect to G, not k.
k = G.subgraph(res)  

pl.figure()
nx.draw_networkx(k, pos=pos)

othersubgraph = G.subgraph(range(6,G.order()))
nx.draw_networkx(othersubgraph, pos=pos, node_color = 'b')
pl.show()

在此輸入圖像描述

G.nodes()調用中具有data=True的效果如下:

print G.nodes()
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
print G.nodes(data=True)
> [(0, {'club': 'Mr. Hi'}), (1, {'club': 'Mr. Hi'}), (2, {'club': 'Mr. Hi'}), (3, {'club': 'Mr. Hi'}), (4, {'club': 'Mr. Hi'}), (5, {'club': 'Mr. Hi'}), (6, {'club': 'Mr. Hi'}), (7, {'club': 'Mr. Hi'}) ...  *I've snipped stuff out*

所以G.nodes()只給出節點名稱。 G.nodes(data=True)給出一個元組列表,其中節點名稱為第一個條目,dict顯示第二個條目中有關這些節點的任何數據。

暫無
暫無

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

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