网络图中图形节点的简单水平布局

问题描述 投票:0回答:1

我有一个数据框,其中包含网络表示形式的航班连接数据

边缘 来源 目标 类型
ZRH_ZRH_-1_base_ZRH_PMI_470_flight_idle0_start ZRH 来源 ZRH-PMI 470 开始
ZRH_PMI_470_flight_PMI_ZRH_655_flight_idle70_sit ZRH-PMI 470 PMI-ZRH 655
PMI_ZRH_655_flight_ZRH_ZRH_-1_base_idle0_end PMI-ZRH 655 ZRH水槽 结束
... ... ... ...

source
target
是航班(例如
ZRH-PMI 470
)或基地(
ZRH
)。 我正在尝试创建以下图表(灰色区域代表之前发布的示例数据框中不存在的其他航班连接,只是为了给出最终图表应该如何的想法)

我正在使用

从数据帧创建网络
import networkx as nx

G = nx.from_pandas_edgelist(
    test,
    "source",
    "target",
    True,
     create_using=nx.DiGraph()
)

但我能接近我想要的唯一方法是

kamada_kawai_layout

这看起来很奇怪,因为我认为不应该这样使用。

有没有办法创建布局而无需手动定义每个节点的位置?最后我只想在水平线上组织孩子和父母之间的联系......没什么花哨的。我尝试查看

multipartite_layout
但我实际上没有指示图层的节点属性。

python networkx graph-theory graphviz
1个回答
0
投票

我意识到

dot
(
https://graphviz.org/docs/layouts/dot/
) 的 graphviz 布局正是我所需要的。

我现在正在使用

创建布局位置
pos = graphviz_layout(G, prog='dot', args='-Grankdir="LR"')

这给了我类似于我需要的东西。

© www.soinside.com 2019 - 2024. All rights reserved.