我正在尝试从距离矩阵绘制图表。代码工作正常,给我一个图像。图像很大但所有节点都打包在一起。我想增加节点之间的空间。 我希望节点更加分开而不是放大。
我尝试了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!"
输出(边缘和标签已移除):
具有600个节点的Graphvix NEATO的输出 -
答案 0 :(得分:4)
来自figure文档:
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
因此,图(figsize =(10,10))创建了一个10英寸×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以获取更多详细信息。