2012-02-26 130 views

回答

4

這是你需要的三角形平等每個三角形能夠繪製這樣是不可能的一個東西。所以你只能接近它。爲此,您可以使用「強制嵌入」算法。 igraph中有幾個。我經常使用的是Fruchterman-Reingold算法。

詳見:

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

編輯:

注意,節點之間的距離將與絕對邊緣權重的逆有所對應。

3

就像Sacha Epskamp所說的,除非你的數據是完美的,否則你不能繪製一個不會違反某些三角不等式的圖。但是,有一些名爲Multidimensional scaling (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) 

當然,你可以使用任何圖形軟件包繪製xy(你詢問igraph明確)。

最後,如果您搜索「多維縮放」或「MDS」,我相信您會發現很多其他實現。祝你好運。

+2

另請注意,在'igraph'中有一個名爲'layout.mds'的函數,它似乎在全距離矩陣上執行MDS以獲得佈局座標。 – 2012-02-26 18:37:07