python - 如何更改networkx图中的节点位置?
问题描述
我想networkx.DiGraph
根据 aDictionary
值更改 a 中的节点位置。
我的尝试:
1)首先我生成一个字典,其中Keys
包含Node
名称和坐标,这是我的结果Value
:Tuples
X
Y
{'Start': (2, 2), 'S0': (0, 0), 'S1': (1, 0), 'S2': (2, 0), 'S3': (3, 0), 'S4': (4, 0), 'S5': (5, 0), 'S6': (6, 0), 'S7': (7, 0), 'S8': (8, 0), 'S9': (9, 0), 'S10': (10, 0), 'S11': (11, 0), 'S12': (12, 0), 'S13': (13, 0), 'S14': (14, 0), 'S15': (15, 0), 'S16': (16, 0), 'S17': (17, 0), 'S18': (18, 0), 'S19': (19, 0), 'S20': (20, 0), 'S21': (21, 0), 'S22': (22, 0), 'S23': (23, 0), 'S24': (24, 1), 'S25': (25, 1), 'S26': (26, 2), 'S27': (27, 2), 'S28': (28, 2), 'S29': (29, 3), 'S30': (30, 3), 'S31': (31, 3), 'S32': (32, 3), 'S33': (33, 3), 'S34': (34, 3), 'S35': (35, 3), 'S36': (36, 3), 'S37': (37, 3), 'S38': (38, 3), 'S39': (39, 3), 'S40': (40, 3), 'S41': (41, 3), 'S43': (43, 3), 'S44': (44, 3), 'S45': (45, 3), 'S47': (47, 3), 'S48': (48, 3), 'S49': (49, 3), 'S50': (50, 3), 'S51': (51, 3), 'S42': (42, 3), 'S46': (46, 3), 'Finish': (2, 2)}
2)然后我从列表生成并使用(下面是列表)Nodes
将其添加到图形中:G.add_nodes_from(nodes)
nodes
['Start', 'S0', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20', 'S21', 'S22', 'S23', 'S24', 'S25', 'S26', 'S27', 'S28', 'S29', 'S30', 'S31', 'S32', 'S33', 'S34', 'S35', 'S36', 'S37', 'S38', 'S39', 'S40', 'S41', 'S43', 'S44', 'S45', 'S47', 'S48', 'S49', 'S50', 'S51', 'S42', 'S46', 'Finish']
3)最后但并非最不重要的一点是,我生成了边缘(数据太大,无法放在这里)。
4)然后我根据这个答案把它们放在一起:
G = nx.DiGraph()
G.add_nodes_from(nodes) #Add nodes
#G.add_edges_from(edges) #DONT' use this line of code for reproduction
for node, pos in positions.items(): #Add Node positions
G.nodes[node]['pos'] = pos
5)当我绘制图表时,这就是我得到的:
nx.draw_shell(G, with_labels = True, node_size = 500)
有什么问题?
- 好吧,您可以看到这些职位不是我定义的那样。
- 奇怪的是,当我
nodes
用这个命令打印出属性时:pos = nx.get_node_attributes(G,'pos')
. 我可以在正确的位置看到我的所有位置。 - 如何让图表绘制
Nodes
在所需的位置?
编辑:
- 将命令从
nx.draw_shell
to更改nx.draw
似乎没有帮助。
解决方案
您可以使用参数将位置字典(键是节点,值是二维坐标)传递给更通用draw_networkx
的函数pos
:
nx.draw_networkx(G,pos= positions,with_labels=True,node_color=node_color,node_size=500)
请注意,nx.draw_shell
它将根据外壳布局算法来布局您的网络。
推荐阅读
- pip - 制作一个带有 C++ 扩展的跨平台 PyPI 包(用 pybind11 包装,用 bazel 构建)
- next.js - 如何使用 next.js 在客户端路由的页面之间共享、读取和写入全局状态?
- javascript - JavaScript 下载页面中的所有 .pdf 文件并重命名它们
- jinja2 - 将自定义 Jinja2 过滤器/测试添加到 MkDocs
- macos - 如何计算 macOS 中的中断延迟?
- reactjs - 如何在生产中使用电子、反应和电子生成器显示图像
- html - Html和CSS如何使具有悬停效果的图像成为超链接
- unity3d - unity 在同一位置实例化多个对象。我想把它们散开
- python-3.x - 通过使用 parse_qs 监听来捕获 cookie
- javascript - WordPress 中的轮播问题(店面主题)