2013-05-15 27 views
11

Facebookデータを.jsonファイル形式で自分のコンピュータにインポートしました。データ形式である:そしてノードサイズはNetworkXのノード次数に依存

{"nodes":[{"name":"Alan"},{"name":"Bob"}],"links":[{"source":0,"target:1"}]} 

、私はこの機能を使用:

def parse_graph(filename): 
""" 
Returns networkx graph object of facebook 
social network in json format 
""" 
G = nx.Graph() 
json_data=open(filename) 
data = json.load(json_data) 
# The nodes represent the names of the respective people 
# See networkx documentation for information on add_* functions 
G.add_nodes_from([n['name'] for n in data['nodes']]) 
G.add_edges_from([(data['nodes'][e['source']]['name'],data['nodes'][e['target']]['name']) for e in data['links']]) 
json_data.close() 
return G 

NetworkXにグラフを使用するこの.jsonファイルを有効にします。私は、ノードの次数を見つけた場合、私が使用する方法を知っている唯一の方法は次のとおりです。

Pはすべての私の友人のグラフである
degree = nx.degree(p) 

。ここでは、ノードのサイズがそのノードの次数と同じになるようにグラフをプロットしたいと思います。これはどうすればいいですか?使用

nx.draw(G,node_size=degree) 

は動作しませんでしたし、私は別の方法を考えることはできません。

答えて

21

nx°(p)は、node_size keywod argumentにスカラーまたはサイズの配列が必要な間にdictを返します。偉大な答えを提供miles82 @

import networkx as nx 
import matplotlib.pyplot as plt 

g = nx.Graph() 
g.add_edges_from([(1,2), (2,3), (2,4), (3,4)]) 

d = nx.degree(g) 

nx.draw(g, nodelist=d.keys(), node_size=[v * 100 for v in d.values()]) 
plt.show() 

enter image description here

+0

偉大な答え!以下に述べるように、データに0度のノードが表示されるようにするには、ノードのサイズにd.values()のvの[ ] 'となるので、0度ノードが現れる。 – Tchotchke

1

:あなたはこのように返しnx.degree辞書を使用することができます。しかし、すでにG.add_nodes_from(nodes)のようなものを使ってノードをグラフに追加した場合、d = nx.degree(G)はノードと同じ順序で度を返さないことがわかりました。前の回答をオフに構築

、あなたは度が正しい順序であることを保証するために、わずかにソリューションを変更することができます。

d = nx.degree(G) 
d = [(d[node]+1) * 20 for node in G.nodes()] 

注度ゼロのノードが追加されていることを確認するだろうd[node]+1、チャート。

関連する問題