2013-07-03 102 views
3

Drawing a huge graph with networkX and matplotlibMatplotlib savefig()在图形

的放大,我基本上reasking链接的问题。我认为我可以更好地解释这个问题。在大图上调用mathplotlib.show()时,默认情况下是缩小的聚集输出。我想要的最后状态是使用mathplotlib.savefig()来保存报告中使用的情节。但是,savefig()输出太缩小了,太笼统了。更改图像尺寸或dpi不会解决此问题。只会缩小放大的图像。有没有办法放大图表并保存,而不使用用户界面?用户界面,我可以放大,扩大节点,并围绕有问题的节点,但我不知道如何自动做到这一点。

相关代码:

nx.draw(G,pos,node_color=colorvalues, with_labels = False,node_size=values) 
    fig.set_size_inches(11,8.5) 
    if show ==0: 
     plt.show() 
    if show ==1: 
     plt.savefig(name+" coremem.png",bbox_inches=0,orientation='landscape',pad_inches=0.1) 

回答

3

您可以使用ax.set_xlimax.set_ylim来设置图的xy范围。例如,

import networkx as nx 
import matplotlib.pyplot as plt 
import numpy as np 

filename = '/tmp/graph.png' 
G = nx.complete_graph(10) 
pos = nx.spring_layout(G) 
xy = np.row_stack([point for key, point in pos.iteritems()]) 
x, y = np.median(xy, axis=0) 
fig, ax = plt.subplots() 
nx.draw(G, pos, with_labels=False, node_size=1) 
ax.set_xlim(x-0.25, x+0.25) 
ax.set_ylim(y-0.25, y+0.25) 
plt.savefig(filename, bbox_inches=0, orientation='landscape', pad_inches=0.1) 

enter image description here


要找出原来的限制(呼叫ax.set_xlimax.set_ylim之前),使用

>>> ax.get_xlim() 
(-0.20000000000000001, 1.2000000000000002) 

ax.get_ylim() 
(-0.20000000000000001, 1.2000000000000002) 
+0

谢谢。这样一个简单的命令,愚蠢的我忽略了它。我目前正试图找出一种数学方法来自动确定网络的中心质量并对其进行缩放。例如,我有分别为节点的xvalues和yvalues的列表。我已经完成了ax.set_xlim(min(xval) - 。25,max(xval)+。25),对于yvalues也是如此。 .25是一个很好的缓冲区。我的问题是,在spring_layout的一个大图中,两个彼此连接但与其他节点没有连接的节点将如此遥远,以至于它毁掉了我的算法......我将继续努力...... – Brad

+0

取而代之的质心,你可以使用'pos'给出的节点'x'和'y'位置的中位数。我已经在上面添加了一些代码来展示我的意思。 – unutbu

0

不能放大这么说就我所知,但你可以设置轴。例如,如果您的原始图形在两个坐标轴上均为1-100,则可以以编程方式将其从30移至40并保存。