【问题标题】:Making Nodes more apart (Graph Visualization)使节点更加分开(图形可视化)
【发布时间】:2012-11-26 21:55:18
【问题描述】:

我正在尝试从距离矩阵中绘制图表。该代码工作正常,并给了我一个图像。图像很大,但所有节点都打包在一起。我想增加节点之间的空间。 我希望节点更加分开而不是放大。

我试过 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 的输出 -

【问题讨论】:

    标签: graph matplotlib graphviz networkx graph-visualization


    【解决方案1】:

    来自figure 文档:

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

    所以 figure(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 了解更多详情。

    【讨论】:

    • 在您的新代码中,这一行的 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)。或尝试不同的布局。
    • pos = nx.spring_layout(G, scale=2) 也尝试了 graphviz_layout(G)、circular_layout(G, scale=2)。没有任何帮助
    • 在您的绘图参数中尝试 node_size 例如node_size=15
    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 2012-06-05
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2013-04-15
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多