2013-05-15 11 views
11

पर नोड डिग्री पर निर्भर है। मैंने अपने फेसबुक डेटा को .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) 

पी मेरे सभी दोस्तों का ग्राफ है। अब, मैं ग्राफ को प्लॉट करना चाहता हूं जैसे नोड का आकार उस नोड की डिग्री के समान है। मैं यह कैसे करु?

का उपयोग करना:

nx.draw(G,node_size=degree) 

काम नहीं किया है और मैं एक और तरीका नहीं सोच सकते हैं।

उत्तर

21

nx.degree (पी) 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

+0

शानदार उत्तर! जैसा कि मैंने नीचे उल्लेख किया है, यदि डेटा में शून्य डिग्री नोड्स हैं जो उपयोगकर्ता दिखाना चाहते हैं, तो नोड आकार में कुछ मूल्य जोड़ा जाना चाहिए, जैसे: '[(v + 1) * 100 v में v.values ​​() ] ', ताकि शून्य डिग्री नोड्स दिखाई दें। – Tchotchke

1

@ 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, जो लगता है कि शून्य डिग्री के नोड्स के लिए जोड़ रहे हो जाएगा चार्ट।

संबंधित मुद्दे