web-dev-qa-db-ja.com

Node NetworkXのノード次数に依存するサイズ

Facebookデータを.jsonファイルの形式でコンピューターにインポートしました。データの形式は次のとおりです。

{"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

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

degree = nx.degree(p)

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

使用:

nx.draw(G,node_size=degree)

うまくいかなかったし、別の方法を考えることはできません。

19
sunny

Networkx 2.xを使用しているユーザー向けの更新

APIがv1.xからv2.xに変更されました。 _networkx.degree_はdictではなくDegreeViewオブジェクトを documentation で返すようになりました。

1.xから2.xに移行するためのガイドがあります here

この場合、基本的にはdict(g.degree)ではなくd = nx.degree(g)を使用することになります。

更新されたコードは次のようになります。

_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 = dict(g.degree)

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

nx.degree(p)はdictを返しますが、 node_size keywod argument にはスカラーまたはサイズの配列が必要です。次のようにdict nx.degreeを使用できます。

_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

32
miles82

@ miles82は素晴らしい答えを提供しました。ただし、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、これにより、次数0のノードが確実にチャートに追加されます。

2
Tchotchke