7

我正在尝试绘制一个图,其中顶点之间的距离对应于边权重*,并且我发现在 graphviz 中有一种方法可以绘制这样的图。有没有办法在 R 中使用 igraph 包(特别是使用 graph.adkacency)来做到这一点?

谢谢,

诺姆

4

2 回答 2

4

这是不可能的,因为每个三角形都需要三角形相等才能绘制这样的对象。所以你只能近似它。为此,您可以使用“强制嵌入”算法。igraph中有几个。我经常使用的是 Fruchterman-Reingold 算法。

详情见:

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

编辑:

请注意,节点之间的距离将在某种程度上与绝对边缘权重的倒数相对应。

于 2012-02-26T11:43:44.293 回答
3

就像 Sacha Epskamp 提到的,除非您的数据是完美的,否则您无法绘制不会违反某些三角不等式的图表。但是,有一些名为多维缩放 (MDS)的技术旨在最大限度地减少此类违规行为。

R 中的一种实现cmdscale来自stats包。我推荐底部的示例?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”,我相信您会发现很多其他实现。祝你好运。

于 2012-02-26T13:57:28.810 回答