2012-12-09 2 views
2

거리 매트릭스에서 그래프를 플롯하려고합니다. 코드가 잘 작동하고 나에게 이미지를 준다. 이미지는 크지 만 모든 노드가 함께 묶입니다. 나는 노드 사이의 공간을 늘리고 싶다. 노드가 더 멀리 떨어져 있지 않게하고 싶습니다.노드를 더 깔끔하게 만들기 (그래프 시각화)

그래도 Graphviz NEATO를 사용해 보았습니다.하지만 문제는 100 개의 노드 만 지원한다는 것입니다. 1000 개의 노드가 있으므로 100 개의 노드로 구성된 10 개의 클러스터를 각각 보여주었습니다.

내 전체 코드 -

import networkx as nx 
import pickle 
import matplotlib.pyplot as plt 
print "~~~Unpickle." 
p_file = open('pickles/names') 
Names = pickle.load(p_file) 
p_file.close() 
p_file = open('pickles/distance') 
Dist = pickle.load(p_file) 
p_file.close() 

G = nx.Graph() 

print "~~~Inserting Nodes." 
for store in Names: 
    G.add_node(store) 

print "~~~Inserting Edges." 

for i in range(601): 
    for j in range(601): 
     if Names[i]!=Names[j]: 
      G.add_edge(Names[i],Names[j],weight=Dist[i][j]) 
print "~~~Drawing Graph." 
nx.draw(G,pos,node_color='#A0CBE2',edge_color='none',width=1, edge_cmap=plt.cm.Blues, with_labels=False) 
print "~~~Saving Figure." 
plt.savefig("graph.png", dpi=500, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None,transparent=False, bbox_inches=None, pad_inches=0.1) 
print "~~~Success!" 

출력 (가장자리와 라벨 제거) : 600 개 노드와 Graphvix NEATO의 enter image description here

출력 - figure 문서에서

enter image description here

답변

3

:

,210

figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

그래서 그림 (figsize는 = (10,10))는 800 * 800 픽셀 것이다 -by- 10 인치 10 인치 영상을 생성한다.

큰 네트워크 그래프를 인쇄하려면 가장 쉬운 방법은 DPI를 높이는 것입니다.

같은 시도 : 또한이 옵션을 사용

plt.savefig("graph.pdf")

PDF를 인쇄 시도 할 수

plt.figure(num=None, figsize=(10, 10), dpi=1200). This will produce a large image file.

을, 마지막 그래프는 래스터되지 않습니다.

노드 사이의 거리를 변경하려면 노드를 작게 만들거나 레이아웃을 변경하십시오. 을 변경하면 레이아웃이 잘 수행되지 않습니다.

모든 노드 사이의 거리를 두 배로

scale = 2

예를 들어 레이아웃 의 스케일 옵션을 사용해보십시오.

그래서 귀하의 예제에서, 당신은 또한 다른 레이아웃 자세한 내용은 documentation를 볼 수 있습니다 라인을

nx.draw(G)

pos = nx.circular_layout(G, scale=2) 
nx.draw(G, pos) 

에 변경합니다.

+0

새 코드에서이 행의 위치는 무엇입니까? 'nx.draw (G, pos, node_color = '# A0CBE2', edge_color = 'none', width = 1, edge_cmap = plt.cm.Blues, with_labels = False) '쓰기 시도'pos = nx.graphviz_layout (G)'한 줄 전에. 또는 다른 레이아웃을 사용해보십시오. – rputikar

+0

'pos = nx.spring_layout (G, scale = 2)'도 graphviz_layout (G), circular_layout (G, scale = 2)을 시도했습니다.아무것도 draw 인수에서 – Anirudh

+0

가 node_size를 시도하는 데 도움이됩니다. 'node_size = 15' – rputikar