我正在尝试绘制一个图,其中顶点之间的距离对应于边权重*,并且我发现在 graphviz 中有一种方法可以绘制这样的图。有没有办法在 R 中使用 igraph 包(特别是使用 graph.adkacency)来做到这一点?
谢谢,
诺姆
- (曾经有人问过:绘制一个图,其中顶点之间的距离对应于边权重)
我正在尝试绘制一个图,其中顶点之间的距离对应于边权重*,并且我发现在 graphviz 中有一种方法可以绘制这样的图。有没有办法在 R 中使用 igraph 包(特别是使用 graph.adkacency)来做到这一点?
谢谢,
诺姆
这是不可能的,因为每个三角形都需要三角形相等才能绘制这样的对象。所以你只能近似它。为此,您可以使用“强制嵌入”算法。igraph中有几个。我经常使用的是 Fruchterman-Reingold 算法。
详情见:
library("igraph")
?layout.fruchterman.reingold
请注意,节点之间的距离将在某种程度上与绝对边缘权重的倒数相对应。
就像 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)
当然,您可以绘制x
和y
使用任何图形包(您专门询问过igraph
)。
最后,如果您搜索“多维缩放”或“MDS”,我相信您会发现很多其他实现。祝你好运。