最近邻居的大型networkx图

时间:2016-03-03 04:10:21

标签: python matplotlib graph network-programming networkx

我正在努力建立一个网络人物。 它基本上是来自具有相应颜色的特定节点的第一和第二邻居的子网。我已经包含了我的函数来创建第一和第二邻域的颜色以及创建subgraph从这些名单中。

我认为颜色部分正在工作,但由于布局太小,我无法确定。我已尝试扩展spring_layout(G) w / How to increase node spacing for networkx.spring_layout,但似乎没有效果。

如何创建一个网络图,我可以实际可视化节点及其连接的幅度? (~1000个节点)我打算添加with_labels但是为了简单起见,在图像中没有包含它。

我的主要目标是为根节点“c”(青色)着色,第一个邻居为“b”(蓝色),第二个邻居为“g”(绿色),其数字足以让我读取标签和看到联系。

我相信我提供了足够的代码,如果我需要添加更多代码,请告诉我,我会编辑。

import networkx as nx
from collections import defaultdict

def neighborhood(G,node_list):
    #G is the main nx.Graph() object that has ALL the nodes (~7000 nodes)
    D_node_neighborhood = defaultdict(list)
    for node in node_list:
        #Color 1st neighbors blue
        for n1 in G.neighbors(node):
            D_node_neighborhood[node].append((n1,"b"))
            #Color 2nd neighbors green
            for n2 in G.neighbors(n1):
                D_node_neighborhood[node].append((n2,"g"))
    return(D_node_neighborhood)

def subnetwork(G,D_node_neighborhood,root_color = "c"):
    D_node_subgraph = {}
    for node,nghbr_color in D_node_neighborhood.items():
        neighbors = [entry[0] for entry in nghbr_color]
        colors = [entry[1] for entry in nghbr_color]
        H = G.subgraph(neighbors + [node]) #Add root note to neighbors list and create subgraph
        D_node_subgraph[node] = (H,colors + [root_color]) #Do the same with the colors
    return(D_node_subgraph)

D_node_neighborhood.keys()[0] #Grab first one, this object is a list of tuples ("node-name","color-of-node") around 1000
G,colors = D_node_subgraph[node] #Separate them out
nx.draw(G,node_color=colors,node_size=10,alpha=0.8) #Draw the graph w/ corresponding colors

enter image description here

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,你想要有更大的数字。

您可以在实际绘图后获得数字并增加其大小。

nx.draw(G)
fig = plt.gcf()
fig.set_size_inches((10, 10))
plt.show()

为了探索您的图表,我建议使用更适合该任务的工具:Gephi。您可以可视化网络并连续应用不同的布局,甚至可以手动移动节点。

要从Networkx转到Gephi,只需以graphml格式导出图形,如下所示:

nx.write_graphml(G, 'your_graph.graphml')