我尝试使用我从函数中随机生成的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)
任何人都可以帮我这个吗?感谢
答案 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