根据权重可视化节点之间的距离 - 用R表示

时间:2012-02-26 10:11:03

标签: r distance igraph

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

谢谢,

诺姆

2 个答案:

答案 0 :(得分:4)

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

详见:

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

编辑:

请注意,节点之间的距离将与绝对边缘权重的倒数略有对应。

答案 1 :(得分:3)

像Sacha Epskamp提到的那样,除非您的数据是完美的,否则您无法绘制不会违反某些三角不等式的图表。但是,有一些名为Multidimensional scaling (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)

当然,您可以使用任何图形包(您专门询问x)来绘制yigraph

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