首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NetworkX中,网络图未进行可视化优化

在NetworkX中,网络图未进行可视化优化
EN

Stack Overflow用户
提问于 2016-10-18 01:33:12
回答 1查看 1.1K关注 0票数 2

我刚开始使用NetworkX,所以我可能做错了什么。我正在尝试使用从wikipedia.org抓取的数据来创建简单的图形。下面是我使用spring_layout选项构建的一个简单图形的示例。这是预期的输出吗?我在想,它会重新排列这些点,尽量避免交叉线,这样看起来就更简单了。它似乎根本没有试图避免穿越。

此外,我想要更多的流程图从左到右,如this (每个点都有一个年份值)(或垂直),但这个doesn't seem to be possible in NetworkX。有人能证实这一点吗?在我看来,线性流程图似乎是一种常见的需求。

本例中的数据:

代码语言:javascript
复制
selected_nodes = [96, 64, 163, 132, 166, 138, 108, 141, 238, 50, 58, 60, 61, 223]

selected_edges = [
    (50, 58),
    (61, 64),
    (60, 64),
    (58, 96),
    (108, 132),
    (96, 141),
    (138, 163),
    (141, 163),
    (64, 166),
    (163, 223),
    (132, 238),
    (96, 238),
    (166, 238),
    (223, 238)
]

text_labels = {
    50: u'ALGOL 58 (IAL)',
    58: u'ALGOL 60',
    60: u'COMIT (implementation)',
    61: u'FORTRAN IV',
    64: u'SNOBOL',
    96: u'ALGOL 68 (UNESCO/IFIP standard)',
    108: u'SETL',
    132: u'ABC',
    138: u'Modula',
    141: u'Mesa',
    163: u'Modula-2',
    166: u'Icon (implementation)',
    223: u'Modula-3',
    238: u'Python'
}

脚本代码

代码语言:javascript
复制
# This visualisation creates a network graph 
# with the spring layout

import networkx as nx
import matplotlib.pyplot as plt  

G = nx.DiGraph() # Create an empty Graph

G.add_nodes_from(selected_nodes)
G.add_edges_from(selected_edges)

plt.figure(1,figsize=(15,15))
#nx.draw(G, node_color='c', edge_color='k', with_labels=True)

pos = nx.spring_layout(G)

plt.figure(1,figsize=(15,15))

nx.draw_networkx_nodes(G, pos, labels=True)
nx.draw_networkx_edges(G, pos, arrows=True)
#nx.draw_networkx_labels(G, pos, labels)

for p, values in pos.iteritems():
    x, y = values
    plt.text(x+0.04, y+0.02, s=text_labels[p], horizontalalignment='center')

plt.savefig('lang_predecessors.pdf')
plt.show()
EN

回答 1

Stack Overflow用户

发布于 2016-10-20 21:34:07

代码语言:javascript
复制
The graphviz dot layout has a hierarchical layout.  If you install pygraphviz you can use it like this

import networkx as nx
import matplotlib.pyplot as plt
from networkx.drawing.nx_agraph import to_agraph

selected_nodes = [96, 64, 163, 132, 166, 138, 108, 141, 238, 50, 58, 60, 61, 223]

selected_edges = [
    (50, 58),
    (61, 64),
    (60, 64),
    (58, 96),
    (108, 132),
    (96, 141),
    (138, 163),
    (141, 163),
    (64, 166),
    (163, 223),
    (132, 238),
    (96, 238),
    (166, 238),
    (223, 238)
]

text_labels = {
    50: u'ALGOL 58 (IAL)',
    58: u'ALGOL 60',
    60: u'COMIT (implementation)',
    61: u'FORTRAN IV',
    64: u'SNOBOL',
    96: u'ALGOL 68 (UNESCO/IFIP standard)',
    108: u'SETL',
    132: u'ABC',
    138: u'Modula',
    141: u'Mesa',
    163: u'Modula-2',
    166: u'Icon (implementation)',
    223: u'Modula-3',
    238: u'Python'
}
G = nx.DiGraph() # Create an empty Graph

for k,v in text_labels.items():
    G.add_node(k,label=v)
G.add_edges_from(selected_edges)

A = to_agraph(G)

A.draw('lang_predecessors.png', prog='dot')

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40092390

复制
相关文章

相似问题

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