[R 그래프/시각화] 방향성 있는 가중 네트워크 시각화 (directec and weighted network visualization), R igraph package
R 분석과 프로그래밍/R 그래프_시각화 2016. 7. 3. 17:48이번 포스팅에서는 방향성 있는 가중 네트워크 시각화 (directed and weighted network visualization)에 대해서 소개하겠습니다.
- R igraph package 를 사용해서
- 심리학 저널의 상호인용 빈도 데이터
(* source : Lattin, Carroll and Green, 2003)
를 대상으로 논문 상호인용 빈도 네트워크를 그려보겠습니다.
먼저, 방향성 있는 가중 네트워크에 대해서 한번 더 소개하자면, 아래와 같이 화살표로 방향이 있고, 연결선에 가중치(weight)가 있는 네트워크를 말합니다.
[ 방향성 있는 가중 네트워크 (Directed and Weighted Network) ]
심리학 저널의 상호인용 빈도를 행렬 형태로 나타내보면 아래와 같습니다.
행렬의 요소 (i, j) 빈도는 저널 i의 논문이 저널 j에 인용된 회수입니다.
- 예) (1, 2) = 32 : AJP 논문 32편이 JASP 논문에 인용됨
(2, 1) = 8 : JASP 논문 8편이 AJP 논문에 인용됨
[ 심리학 저널 간 상호 인용 빈도 ]
|
[1] AJP |
[2] JASP |
[3] JAP |
[4] JCPP |
[5] JCP |
[6] JEDP |
[7] JEXP |
[8] PKA |
[1] AJP |
119 |
32 |
2 |
35 |
6 |
4 |
125 |
2 |
[2] JASP |
8 |
510 |
8 |
8 |
116 |
9 |
19 |
5 |
[3] JAP |
4 |
16 |
84 |
0 |
11 |
7 |
6 |
5 |
[4] JCPP |
21 |
11 |
1 |
533 |
1 |
0 |
70 |
0 |
[5] JCP |
0 |
73 |
7 |
0 |
225 |
3 |
0 |
13 |
[6] JEDP |
1 |
9 |
8 |
1 |
7 |
52 |
0 |
2 |
[7] JEXP |
85 |
119 |
16 |
126 |
12 |
27 |
586 |
13 |
[8] PKA |
2 |
4 |
10 |
1 |
7 |
5 |
15 |
58 |
library()함수로 R의 igraph package를 로딩해서 시각화를 해보겠습니다.
igraph package는 데이터 포맷이 ID1, ID2, Weight or Frequency 의 행렬(matrix) 입니다.
아래에 위의 표를 행렬로 입력해서 불러들였는데요, 빈도(3번째 열)에 +1 을 해주었습니다.
(0이면 에러가 나는지 안되네요)
R script는 'R을 활용한 사회네트워크분석 입문'의 예시를 거의 대부분 사용하였으며,
그래프의 설정 parameter를 이리 저리 숫자를 조절해보면서 살짝 바꿔보았습니다.
|
igraph plot 의 parameter 기능은 아래와 같습니다.
parameter를 바꿔가면서 최적의 이쁜 그래프를 찾아가 보시기 바랍니다.
1) Layout : 점의 좌표를 정하는 알고리즘
- layout.circle : 원 배치 (위의 예시)
- layout.random : 무작위 배치
- layout.fruchterman.reingold : Fruchterman Reingold 배치 알고리즘
- layout.kamada.kawai : kamada Kawai 배치 알고리즘
- layout.lgl : 대규모 네트워크를 위한 배치 알고리즘
2) Edge : 선 관련 파라미터
- edge.color : 선 색 지정 (default = "darkgrey")
- edge.width : 선 폭
- edge.arrow.size : 화살 크기
- edge.arrow.width : 화살 폭
- edge.arrow.mode : 화살 머리 유형 (0 : 없음, 1 : 역방향, 2 : 순방향, 3 : 양방향)
(무방향 네트워크의 경우 default = 0)
- edge.lty : 선 유형 ("solid", "dashed", "dotted", "dotdash", "longdash", "twodash")
- edge.label : 선 레이블
- edge.label.family : 선 레이블 종류 ("serif", "sans", "mono" 등)
- edge.label.font : 선 레이블 글자형 (1 : plain text, 2 : bold, 3 : italic, 4 : bold italic)
- edge.label.cex : 선 레이블 크기 (default = 1)
- edge.label.color : 선 레이블 색 (default = "navy")
3) Vertex : 점 관련
- vertex.size : 점 크기, vector도 가능 (default = 15)
- vertex.color : 점 색 (default = "SkyBlue2")
- vertex.frame.color : 점 윤곡의 색 (default = "black")
- vertex.shape : 점 형태 ("circle", "square", "rectangle", "none", default = "circle")
- vertex.label : 점 레이블 (vector)
- vertex.label.family : 점 레이블 종류 ("serif", "sans", "mono" 등)
- vertex.label.font : 점 레이블 글자형 (1 : plain text, 2 : bold, 3 : italic, 4 : bold italic)
- vertex.label.cex : 점 레이블 크기 (default = 1)
- vertex.label.dist : 점 중심과 레이블 간 거리 (default = 0)
- vertex.label.degree : 점 레이블 방향(radian) (좌 : 0, 우 : pi, 상 : -pi/2, 하 : pi/2)
- vertex.label.color : 점 레이블 색 (default = "navy")
네트워크 그래프 하나 그리는데 무슨 놈의 파라미터가 종류가 이렇게 많은 건지 놀랍기도하고, 이걸 언제 다 설정하나 부담되기도 하지요?
default 설정 값을 이용해서 한번 얼른 그려보시고요, 원하는 모양이 아니다 싶으면 parameter 종류 중에서 살짝 살짝 손을 좀 봐가면서 몇 번 더 그래프를 그려보시기 바랍니다.
R이 제공하는 이런 다양한 그래프 옵션이면 못할 것이 없겠지요?!
[Reference]
- R을 활용한 사회네트워크분석 입문, 허명회 저, 자유아카데미, 2012
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
[R] ggplot2 범례 위치 바꾸기, 범례 글자 크기 및 색깔 바꾸기, 범례 순서 바꾸기, 범례 없애기 (0) | 2017.05.27 |
---|---|
[R ggplot2] R ggplot 배경을 흰색으로 바꾸기, x축 라벨 각도를 90도 돌리기, x축과 y축의 위치를 바꾸기 (10) | 2017.05.20 |
[R 그래프/시각화] Sankey Diagram, 두께와 색깔로 흐름, 관계 시각화 (0) | 2016.07.02 |
R 다변량 그래프 (5) 체르노프 얼굴그림 (Chernoff faces) : aplpack package, faces() 함수 (0) | 2016.03.05 |
R 다변량 그래프 (4) 3차원 산점도 (3 dimensional scatter plot) : scatterplot3d() (0) | 2016.02.21 |