如何将固定的 igraph 布局传递给 phangorn 中的 plot.networx?

How to pass a fixed igraph layout to plot.networx in phangorn?

尽管 neighborNets 相对流行,但我找不到以下问题的任何解决方案。在 R 中,我试图绘制一个 neighborNet(使用包 phangorn、对象 class networx 创建)。该包使用 igraph 绘制静态二维图形,因此每次我重新绘制图形时,布局 changes/rotates(显然是 igraph 的默认行为)。现在,如果我要绘制一个普通的 igraph,我只需保存布局,然后继续重新使用它:

fixed = layout.sphere(somegraph)
plot(somegraph, layout=fixed)

但这对当前的问题不起作用。 plot.networx 的帮助文件确实提到了 igraph 和 layout,但只在 'See also' 部分。手动创建 x-y 坐标矩阵是行不通的(如建议 here),节点的节点 labels/tips 的位置在 neighbornet 上很重要。我试过了

library("phangorn")
library("igraph")
mydist = dist(matrix(sample(100), ncol=10))  # example data
nnet = neighborNet(mydist)
fixed = layout.sphere(nnet)  # error, Not a graph object
fixed = layout.sphere(as.igraph(nnet))  # doesn't work properly, mangled graph

所以问题是,如何让它按照

的方式工作
plot.networx(nnet, type="2D", layout = fixed)  # ?

plot.networx 调用 phangorn:::coords 获取坐标(对于 2D)创建一个 igraph 对象然后使用 layout.kamada.kawai。这都是硬编码到 plot.networx 中,因此不够灵活,您可以使用其他布局算法。

您可以按照 phangorn:::coords 中的代码创建图形布局并将布局函数替换为另一个布局函数,然后使用这些坐标调用 phangorn:::plot2D。请参阅 plot.networx 了解如何正确调用 phangorn:::plot2D