使用matplotlib绘制大图时节点大小和颜色的错误

时间:2014-02-17 14:00:09

标签: colors matplotlib size networkx

我正在使用networkx绘制大图,并且当图表很大时我遇到了问题。对于小图表一切正常,但对于大图(1k节点),它似乎在分配颜色和大小时失败。 这是一段有问题的代码

H=nx.connected_component_subgraphs(G)[0]
d=nx.degree(H)
b=nx.eigenvector_centrality(H)
pos2=nx.spring_layout(H,scale=2)

labels={}
colors={}
dim={}

for n in H.nodes():
    i=0 
    for v in b:
        if v==n:
            break
        i+=1
    colors[n]=b.values()[i]
    j=0
    for w in d:
        if w==n:
            break
        j+=1
    dim[n]=d.values()[j]*40

    k=0
    for z in range(2):
        if n in sorted(b.items(), key=lambda x:x[1],reverse=True)[z]:
            labels[n]=n


nx.draw(H,
             pos2,
             with_labels=False,
             node_size=dim.values(),
             node_color=colors.values(),
             cmap=plt.cm.Reds,
             vmin=min(b.values()),
             vmax=max(b.values())   
)

我无法发布图片,因为我没有足够的声誉,但是当我说它失败时,我的意思是(一些)连接低的节点比具有高连接性的节点大,并且颜色也是如此。

知道它发生了什么?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

将关键字nodelist =与您想要绘制的节点一起传递。然后使用相同排序的列表中的颜色和大小设置node_color和node_size参数。

nodes = H.nodes()

nx.draw(H, pos2, nodelist=nodes,
        node_size = [dim[n] for n in nodes],
        node_color= [colors[n] for n in nodes],
        cmap=plt.cm.Reds,
        vmin=min(b.values()),
        vmax=max(b.values()),
        with_labels=False
)