2016-07-22 5 views
1

Betrachten Sie das folgende Beispiel verwenden:Bild verzerrt, wenn es als IGRAPH Knoten

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) 

Das Problem, das ich habe ist, dass das Bild, das als Knoten verwendet wird verzerrt wird, wenn aufgetragen. Ist es möglich, das Verhältnis Breite/Länge zu fixieren?

Auch sehe ich, dass die Position der Knoten jedes Mal ändert sich wie die Werte für die Gewichte auch ändern. Ist es möglich, die Knoten auch in einer festen Position zu halten?

Vielen Dank im Voraus.

+0

Btw, wie das Objekt Rasterbild mit anderen Knotenformen mischen? – pengchy

Antwort

1

Es sieht so aus, als würden Sie die erste vertex.size überschreiben, indem Sie sie zweimal einschließen. So ist eine Dimension festgelegt, während die andere von den Kantengewichten abhängig ist. Statt dessen beide Scheitel Größen eingestellt basierend auf Kantengewichte:

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) 

ist jedoch zu beachten, dass die höchsten und niedrigsten Kantengewichte in einem Verhältnis sind, von etwa 16: 1, so dass der kleinste Eckpunkt viel kleiner als der größte ist, ein.

enter image description here

+0

was für ein dummer fehler ... danke, dass du es entdeckt hast! – David

+0

BTW wissen Sie, warum einige Kanten den Knoten nicht erreichen? – David

+0

Nicht sicher. Ich werde meine Antwort aktualisieren, wenn ich eine Lösung finde. – eipi10

Verwandte Themen