将其用作Igraph节点

时间:2016-07-22 17:54:01

标签: r plot igraph

考虑以下示例:

library(png)
library(igraph)

nodes=5
mat = matrix(runif(n = nodes*nodes,min = 0,max = 10),nodes,nodes)
mat.graph <- graph.adjacency(mat,weighted=TRUE,mode="undirected",diag=FALSE)
imgfilename <- file.path(tempdir(), "img.png")
imgfile <- download.file("https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Circle-icons-water.svg/2000px-Circle-icons-water.svg.png",
                     destfile=imgfilename,mode='wb')
img <- readPNG(imgfilename)
V(mat.graph)$raster <- list(img,img,img,img,img)
plot(mat.graph ,vertex.size=E(mat.graph)$weight,edge.width=E(mat.graph)$weight,
 layout=layout.circle,vertex.shape="raster",vertex.label=NA,vertex.size=30, vertex.size2=30)

我遇到的问题是,绘制时用作节点​​的图像会变形。是否可以保持宽/长比固定?

此外,我看到节点的位置每次都在变化,因为权重值也会发生变化。是否可以将节点保持在固定位置?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

看起来你通过两次包含它来覆盖第一个vertex.size。因此,一个维度是固定的,而另一个维度取决于边缘权重。而是根据边权重设置两个顶点大小:

plot(mat.graph,
     vertex.size=4*E(mat.graph)$weight,
     vertex.size2=4*E(mat.graph)$weight,
     edge.width=E(mat.graph)$weight,
     layout=layout.circle, 
     vertex.shape="raster", 
     vertex.label=NA)

但请注意,最高和最低边缘权重的比例约为16:1,因此最小顶点 小于最大边界

enter image description here