2017-05-24 111 views
1

我想要 1)獲取網絡的座標 2)使用它們爲其他網絡始終具有相同的節點位置。座標在igraph在R

當我得到節點的座標並將座標設置到我從中獲得它們的同一個網絡時,它會改變。 x位置保持不變,y位置與假想的y軸對稱。因此,當應用兩次時,該位置就是我想要的位置。

問題可能出在tkplot.getcoords()函數中。你知道是否有一個技巧來避免應用兩次?

n <- 20 
mat <- matrix(1:n^2, n,n) 
g <- graph.adjacency(mat, mode="directed", weighted=TRUE, diag=FALSE) 
V(g)$color <- "white" 
id <- tkplot(g, edge.curved = 0.5) 

coor <- tkplot.getcoords(id,norm=F) 
coor 
tkplot.setcoords(id, coor) # wrong position 

coor <- tkplot.getcoords(id,norm=F) 
coor 
tkplot.setcoords(id, coor) # desired position 

回答

0

你知道,如果有一個小竅門,以避免將它兩次?

看起來好像你不得不翻轉y座標;這適用於我的電腦:

library(igraph) 
set.seed(1);n <- 5 
mat <- matrix(1:n^2, n,n) 
g <- graph.adjacency(mat, mode="directed", weighted=TRUE, diag=FALSE) 
V(g)$color <- "white" 
id <- tkplot(g, 200, 200, edge.curved = 0.5) 
coor <- tkplot.getcoords(id,norm=F) 
canvas_height <- as.numeric(tcltk::tkcget(tk_canvas(id), "-height"))-20 # twenty by trial&error - prly the frame border top&bottom? 
coor[,2] <- canvas_height-coor[,2] 
# move some vertices and... 
tkplot.setcoords(id, coor) # reset