R:网络情节

时间:2016-10-22 17:23:16

标签: r plot

我尝试使用我从函数中随机生成的100个节点来制作网络图。

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,但他们无法保留原始的散点图(或者我可能不知道如何正确使用它们)。

为简单起见(在网络中只有3个节点的情况下),提供了以下信息。

•节点: 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)

任何人都可以帮我这个吗?感谢

2 个答案:

答案 0 :(得分: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)

编辑:如果你想看到比例,而不仅仅是保留它,我会这样做:

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)

答案 1 :(得分:0)

另一种方法是使用<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/html "access plus 0 seconds" </IfModule> RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]

您可以首先将转换矩阵制作为边缘数据帧。 (也许有更好的方法可以执行此操作,但是我将使用ggraph)。然后,您可以创建节点信息的数据框。这就是全部,因此您可以创建一个igraph对象以使用坐标进行绘图。

tidygraph