2012-02-26 54 views

回答

4

这是你需要的三角形平等每个三角形能够绘制这样是不可能的一个东西。所以你只能接近它。为此,您可以使用“强制嵌入”算法。 igraph中有几个。我经常使用的是Fruchterman-Reingold算法。

详见:

library("igraph") 
?layout.fruchterman.reingold 

编辑:

注意,节点之间的距离将与绝对边缘权重的逆有所对应。

3

就像Sacha Epskamp所说的,除非你的数据是完美的,否则你不能绘制一个不会违反某些三角不等式的图。但是,有一些名为Multidimensional scaling (MDS)的技术旨在最大限度地减少此类违规行为。

R中的一个实现是来自stats包的cmdscale。我建议的例子在?cmdscale底部:

> require(graphics) 
> 
> loc <- cmdscale(eurodist) 
> x <- loc[,1] 
> y <- -loc[,2] 
> plot(x, y, type="n", xlab="", ylab="", main="cmdscale(eurodist)") 
> text(x, y, rownames(loc), cex=0.8) 

当然,你可以使用任何图形软件包绘制xy(你询问igraph明确)。

最后,如果您搜索“多维缩放”或“MDS”,我相信您会发现很多其他实现。祝你好运。

+2

另请注意,在'igraph'中有一个名为'layout.mds'的函数,它似乎在全距离矩阵上执行MDS以获得布局坐标。 – 2012-02-26 18:37:07