我正在尝试绘制一张图表,其中顶点之间的距离对应于边权重*,我发现在graphviz中有一种方法可以绘制这样的图表。是否有一种方法可以使用igraph包(特别是graph.adkacency)在R中实现此目的?
谢谢, Noam
(曾经有人问过:绘制一张图表,其中顶点之间的距离对应于边权重)
谢谢, Noam
(曾经有人问过:绘制一张图表,其中顶点之间的距离对应于边权重)
由于需要每个三角形都满足三角不等式才能绘制这样的对象,因此这是不可能的。因此,您只能进行近似处理。为此,您可以使用“强制嵌入”算法。在igraph中有几种算法可供选择。我经常使用的是Fruchterman-Reingold算法。
有关详细信息,请参见:
library("igraph")
?layout.fruchterman.reingold
请注意,节点之间的距离与绝对边权的倒数有一定的对应关系。
正如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)
igraph
中有一个名为layout.mds
的函数,它似乎在完整距离矩阵上执行 MDS 以获得布局坐标。 - Tamás