首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何绘制基于中心性的图?

如何绘制基于中心性的图?
EN

Stack Overflow用户
提问于 2018-07-22 09:39:57
回答 1查看 1.3K关注 0票数 2

我已经分析了我的图,并获得了特征向量中心性。(如下所示)

代码语言:javascript
复制
cit = nx.read_edgelist('Cit-HepTh.txt', create_using=nx.DiGraph(), nodetype=int)
(...compute centrality to a dict...)

现在我想根据这个字典绘制一个图,其中不同的节点基于它们的中心性具有不同的大小。

我见过一个绘制不同颜色的示例(也许我认为有一种类似的方法来绘制不同大小

代码语言:javascript
复制
node_colours = []
for node in nodes:
    if node < 5:
        node_colours.append('blue')
    else:
        node_colours.append('green')
#draw graph, substitute the single colour with ur list of colours
nx.draw_spring(G, k=1, node_color = node_colours, 
               node_size = 200, font_size = 6, with_labels = True)

我正在尝试绘制一个包含27000+节点的大图,但是为networkX绘制这样的图似乎相当慢。所以我只想画前100名(最高的eigenVector中心度)。你有什么例子或建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-22 10:15:08

这些代码行上的一些内容(虽然使用27k+节点很快,但很脏):

在通过以下方式获得每个节点的中心性后:

代码语言:javascript
复制
 eigen_centrality = nx.eigenvector_centrality(G)
 all_nodes = [(node,eigen_centrality(node)) for node in eigen_centrality]

按中心度查找前100个节点:

代码语言:javascript
复制
top_100_nodes = [n for (n,c) in all_nodes if c in np.argsort(c)[-100:]]

然后,创建前100个节点的子图:

代码语言:javascript
复制
G1 = G.subgraph(top_100_nodes)  

然后绘制图形:

代码语言:javascript
复制
top_100_centrality = nx.eigenvector_centrality(G1)
nx.draw_spring(G1, k =1, node_color = node_colours, \
               node_size = [top_100_centrality(n) for n in G1.nodes()], 
               font_size = 6, with_labels = True)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51461382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档