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

8
我正在尝试绘制一张图表,其中顶点之间的距离对应于边权重*,我发现在graphviz中有一种方法可以绘制这样的图表。是否有一种方法可以使用igraph包(特别是graph.adkacency)在R中实现此目的?
谢谢, Noam
(曾经有人问过:绘制一张图表,其中顶点之间的距离对应于边权重
2个回答

4

由于需要每个三角形都满足三角不等式才能绘制这样的对象,因此这是不可能的。因此,您只能进行近似处理。为此,您可以使用“强制嵌入”算法。在igraph中有几种算法可供选择。我经常使用的是Fruchterman-Reingold算法。

有关详细信息,请参见:

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

编辑:

请注意,节点之间的距离与绝对边权的倒数有一定的对应关系。


4

正如Sacha Epskamp所提到的,除非您的数据完美无缺,否则您无法绘制不违反某些三角不等式的图表。然而,有一些技术被称为多维缩放(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)

当然,你可以使用任何图形包绘制x和y(你特别询问了igraph)。
最后,如果你搜索“多维缩放”或“MDS”,我相信你会找到许多其他实现。祝你好运。

2
请注意,igraph 中有一个名为 layout.mds 的函数,它似乎在完整距离矩阵上执行 MDS 以获得布局坐标。 - Tamás

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接