2016-10-22 10 views
0

Я пытаюсь сделать сетевой график, используя 100 узлов, которые я произвольно генерирую из своей функции.R: сетевой график

genNodes = function(n){ 
numKeep <- 0 
i = numKeep 
x <- vector(mode = "numeric", length = 0) 
y <- vector(mode = "numeric", length = 0) 
while(i < n){ 
    newx = runif(n = 7*n, min = 0, max = 100) 
newy = runif(n = 7*n, min = 0, max = 100) 
newz = runif(n = 7*n, min = 0, max = 4) 
RangeZ = nodeDensity(newx, newy) 
newx = newx[newz <= RangeZ] 
newy = newy[newz <= RangeZ] 
x = c(x, newx) 
y = c(y, newy) 
i = length(x) 
} 
x <- x[1:n] 
y <- y[1:n] 
return(cbind(x, y)) 
} 

Каждый узел здесь, в регионе (0,100). То, что я пытаюсь сделать, это сделать диаграмму рассеянности этих узлов (я знаю, что могу использовать ggplot с geom_point). Но я также пытаюсь превратить этот график рассеяния в сетчатый график и по-прежнему сохранять исходный график рассеяния, что означает, что я хочу добавить ребра к исходной диаграмме рассеяния, и я хочу сохранить масштаб оси x и y. Я пытался использовать ggnet2 и ggnetwork, но они не могут сохранить исходную диаграмму рассеяния (или, может быть, я просто не знаю, как правильно их использовать).

Для простоты (в случае, если в сети имеется только 3node), предоставляется следующая информация.

• Узлов: x = c(1, 2, 3) y = c(5, 5, 2)
• матрица перехода (используется, чтобы определить, есть ли ребро между двумя узлами):

tranR3.5 = matrix(c(1/2, 1/2, 0, 1/3, 1/3, 1/3, 0, 1/2, 1/2), byrow = TRUE, nrow = 3)

Может кто-нибудь помочь мне в этом? Спасибо

ответ

1

Вам нужно сделать это в ggplot? Если нет, попробуйте igraph:

library(igraph) 
test.net1 = graph_from_adjacency_matrix(tranR3.5, 
      mode = "directed", weighted = TRUE) 
plot.igraph(test.net1, layout = cbind(x,y), 
      edge.width=E(test.net1)$weight) 

EDIT: Если вы хотите, чтобы увидеть масштаб, а не только сохранить его, я бы:

plot(c(0,4), c(0,6), type = "n", frame.plot = F) #set up plot window 
plot.igraph(test.net1, layout = cbind(x,y), 
      edge.width=E(test.net1)$weight, add = T, rescale = F) 
+0

да, мы должны сделать это в ggplot ... –

+0

Есть ли у вас какое-либо представление о том, как это сделать в ggnet2 или ggnetwork –

+0

, и я пробовал код, который вы здесь помещаете, он по-прежнему не показывает ось x и ось y. –