我有一个数据框,其中包含网络表示形式的航班连接数据
边缘 | 来源 | 目标 | 类型 |
---|---|---|---|
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
但我实际上没有指示图层的节点属性。
我意识到
dot
(https://graphviz.org/docs/layouts/dot/) 的
graphviz
布局正是我所需要的。
我现在正在使用
创建布局位置pos = graphviz_layout(G, prog='dot', args='-Grankdir="LR"')
这给了我类似于我需要的东西。