2011-05-11 3 views
22

R에서 네트워크 플롯 시도 중 IGraph를 사용하여 네트워크 그래프의 가장자리를 연장하는 방법은 무엇입니까?igraph 네트워크 플롯 (레이아웃 = fruchterman.reingold)에서 어떻게 가장자리를 연장합니까?

저는 실제로 fruchterman-reingold 레이아웃을 사용하고 싶습니다. 그 힘 기반 알고리즘을 "springier"로 만들 수있는 방법이있어서 꼭지점을 더 멀리 떨어 뜨릴 수 있습니까?

감사합니다.

+0

그 해결책은 무엇입니까? –

답변

16

layout.fruchterman.reingold 기능을 사용하여 Fruchterman-Reingold 알고리즘을 제어 할 수 있습니다. 참조 : help('layout.fruchterman.reingold'). 자주 사용하는 설정은 다음과 같습니다.

l <- layout.fruchterman.reingold(g,niter=500,area=vcount(g)^2.3,repulserad=vcount(g)^2.8) 
plot(g,layout=l) 

여기서 g은 그래프 개체입니다. 그래프의 매개 변수 값을 다르게 테스트하고 효과가있는 것이 가장 좋습니다. 특히 repulserad은 그래프의 간격에 영향을줍니다. 기본값은 노드 수의 제곱이므로 더 높은 값을 지정하면 더 많은 간격의 그래프를 얻을 수 있습니다.

+10

"v.1.0.1 이상에서는"repulserad '인수가 사용되지 않으며 효과가 없습니다. " . – WAF

7

layout.fruchterman.reingold 알고리즘이 매개 변수를 조정하여 원하는 것을 제공하지 않는 경우 다음을 수행하기 만하면됩니다. 모든 레이아웃은 각각 첫 번째와 두 번째 열에 x 좌표와 y 좌표가있는 좌표 집합을 반환합니다. 당신은 당신이 원하는 변환을 적용, 당신은 단지 그것을 확장 할 것인지, 단순히

L = layout.fruchterman.reingold(G)*s; #Scaling factor s 

더 멋진 변환도 물론 가능합니다 사용할 수 있습니다. 단지 기록을 위해 tkplot(G, layout=L)을 사용하여 마우스로 수동으로 레이아웃을 편집 할 수도 있습니다. 좌표는 L = tkplot.getcoords(1)을 통해 다시 가져올 수 있습니다.

+2

'rescale = FALSE' 매개 변수를'igraph :: plot' 함수에주지 않으면, 상수에 의한 스케일링은 아무런 효과가 없습니다 – deeenes

관련 문제