2012-12-09 15 views
2

我想绘制距离矩阵的图形。代码工作正常,并给我一个图像。图像很大,但所有节点都打包在一起。我想增加节点之间的空间。 我希望节点分开更多而不是放大。使节点更加分离(图形可视化)

我试过Graphviz NEATO,但问题是它只支持100个节点,因为我有1000个节点,它显示了10个节点,每个节点有100个节点。

我的总代码 -

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

输出(边缘和标签移除): enter image description here

600个节点Graphvix NEATO的输出 -

enter image description here

回答

3

figure文档:

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

所以图(figsize =(10,10))产生一个10英寸-by- 10英寸的图像,这将是800×800像素。

如果要打印大型网络图形,最简单的方法是增加DPI。

试着这么做:

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

您也可以尝试打印PDF

plt.savefig("graph.pdf")

使用此选项,最终图表将不被光栅化。

要更改节点之间的距离,可以减小节点或更改布局。改变 布局很难做好。

尝试在布局 例如缩放选项,

scale = 2

将所有节点之间距离的两倍。

因此,在你的榜样,改线

nx.draw(G)

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

您还可以使用不同的布局,请documentation了解更多详情。

+0

在你的新代码这条线上的pos是什么? '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)。在绘图参数中没有任何东西可以帮助 – Anirudh

+0

尝试node_size例如'node_size = 15' – rputikar