2016-07-19 8 views
1

Ich habe ein Diagramm in igraph mit einer Eckpunktgröße, die für einen Wert codiert wird.
Ich möchte eine Legende mit Symbolen (Punkte in meinem Fall) mit verschiedenen Größen hinzufügen. habe ich versucht, den folgenden CodeLegende in igraph hinzufügen, um Unterschiedscheitelpunkte zu notieren Größe

require(igraph) 
er_graph <- erdos.renyi.game(100, 5/100) 
value<-runif(100) 
n<-6 
size_vec<-seq_len(n) 
sizeCut<-cut(value,n) 
vertex.size<-size_vec[sizeCut] 
plot(er_graph, vertex.label=NA, vertex.size=vertex.size) 
legend('topleft',legend=levels(sizeCut),pt.cex=size_vec,col='black') 

aber ohne Symbole see example

Irgendwelche sugestions mit Legende beenden, wie ich über diese gehen?

Antwort

4

Sie sollten pch auf einen Wert setzen, um anzugeben, welches Zeichen Sie für die Aufzählungszeichen verwenden möchten (siehe ?points, um die möglichen Werte zu überprüfen).
Auch sollten Sie die pt.cex Werte skalieren, um die Kugeln nicht zu groß für die Legende zu machen, und pt.bg verwenden, um die Hintergrundfarbe der Kugeln, z.

# scaled between 1 and 2 
scaled <- 1 + ((2-1) * (size_vec - min(size_vec))/( max(size_vec) - min(size_vec))) 
legend('topleft',legend=levels(sizeCut),pt.cex=scaled,col='black',pch=21, pt.bg='orange') 

enter image description here

EDIT:

Leider ist die richtige Größe der Kugeln Berechnung nicht einfach;

# N.B. /200 is taken from plot.igraph source code 
a <- legend('topleft',legend=levels(sizeCut),pt.cex=size_vec/200,col='white', 
      pch=21, pt.bg='white') 
x <- (a$text$x + a$rect$left)/2 
y <- a$text$y 
symbols(x,y,circles=size_vec/200,inches=FALSE,add=TRUE,bg='orange') 

enter image description here

Haftungsausschluss: dieser Code stützt sich stark auf eine mögliche Abhilfe ist in der gleichen Art und Weise in der plot.igraph Funktion, die sie aufgetragen werden, fügen Sie dann manuell die Eckpunkte der Legende weißen Kugeln Plotten der Quellcode der Funktion plot.igraph, der in einer zukünftigen Version von igraph geändert werden könnte. Wahrscheinlich sollten Sie nach einer anderen Plot-Funktion für igraph suchen, mit der Sie nativ eine Legende hinzufügen können.

+0

Die schön, aber ich will dass die Größe der Punkte in der Legende der tatsächlichen Größe der Punkte im Diagramm entspricht. Wie finde ich den passenden Skalierungsfaktor? –

+0

Überprüfen Sie meine Bearbeitung;) – digEmAll

1

Wer bei dieser Suche, die eine kontinuierliche Skala für Knoten will es statt einer diskreten Skala Größen dann ist dies der Code, den Sie tun müssen, um: auch

require(igraph) 
er_graph <- erdos.renyi.game(100, 5/100) 
value<-runif(100) 
sizeCut<- c(0.2,0.4,0.6,0.8,1.0) 
sizeCutScale <- sizeCut*10 
vertex.size<-value*10 
plot(er_graph, vertex.label=NA, vertex.size=vertex.size) 
legend('topleft',legend=unique(sizeCut),pt.cex= sizeCutScale,col='black') 
a <- legend('topleft',legend=unique(sizeCut),pt.cex=sizeCutScale/200,col='white', 
      pch=21, pt.bg='white') 
x <- (a$text$x + a$rect$left)/2 
y <- a$text$y 
symbols(x,y,circles=sizeCutScale/200,inches=FALSE,add=TRUE,bg='orange') 

enter image description here