2016-07-19 3 views
1

igraph에 값으로 코딩 된 버텍스 크기의 그래프가 있습니다.
다양한 크기의 기호 (내 경우에는 점)가있는 범례를 추가하고 싶습니다. 는 다음 코드차이점 버텍스 크기에 주석을 달기 위해 igraph에 범례 추가

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') 

을 시도했지만 기호를 나는 이것에 대해 이동하는 방법 see example

어떤 sugestions를하지 않고 전설로 끝?

답변

4

pch을 특정 값으로 설정하여 글 머리 기호에 사용할 문자를 지정해야합니다 (가능한 값을 확인하려면 ?points 참조).
또한 총알이 범례에 비해 너무 커지지 않도록 값을 조정하고 pt.bg을 사용하여 글 머리 기호의 배경색을 설정해야합니다.

# 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

: 글 머리 기호의 오른쪽 크기를 계산하는 것은 쉽지 불행하게도

아니다;

# 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

면책 조항 : 가능한 해결 흰색 총알 수동 그들은 plot.igraph의 함수 내에서 플롯 같은 방식으로 전설에 정점을 추가 할 음모를 꾸미고이 코드에 크게 의존 plot.igraph 함수의 소스 코드는 igraph의 차후 버전에서 변경 될 수 있습니다. 아마도 igraph에 대한 또 다른 플롯 기능을 검색하여 네이티브로 범례를 추가 할 수 있습니다.

+0

, 그러나 나는 또한 원하는 범례에있는 점의 크기가 그래프의 점의 실제 크기에 맞는지 확인하십시오. 적절한 스케일링 계수를 어떻게 찾을 수 있습니까? –

+0

내 편집 확인;) – digEmAll

1
노드에 대해 지속적으로 규모가 다음 대신 이산 규모의 크기 이것은 당신이 그것을 할 필요가 코드 원이보고

사람 : 좋은 그

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