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)
うまくいかなかったし、別の方法を考えることはできません。
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()
_
@ 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のノードが確実にチャートに追加されます。