R을 통해 역사적 인물들의 관계를 분석하는 네트워크를 생성하는 것을 목적으로 진행하게된 이번 워크샾에서는 R에서 제공하는 visNetwork패키지(https://datastorm-open.github.io/visNetwork/)를 사용하여 네트워크 시각화에서 각 요소의 특징을 바꾸는 것으로 시작하여 실제 역사 데이터를 활용하여 네트워크를 생성하는 전반적인 과정을 다루고자 한다.
# install.packages("visNetwork")
library(visNetwork, quietly = TRUE)
네트워크 시각화를 생성하기 위해 우선 visNetwork패키지를 설치하고 불러온다.
nodes <- data.frame(id = 1:8)
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8))
visNetwork(nodes, edges, width = "100%")
노드는 각각의 원을 의미하며, 엣지는 원들사이에 연결된 선을 의미한다.
노드에서는 각원들의 정보를 정의하고 엣지는 원들간의 관계를 선으로
연결한다. 그리고 visNetwork
를 통해 네트워크를 생성한다.
코드를 실행하면 8개의 원들과 원들사이의 정보를 나타내는 네트워크가
생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드에 이름을 지정하여 원 위에 각 노드의 정보를 나타낼 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"));nodes
## id label shape
## 1 1 Node 1 square
## 2 2 Node 2 triangle
## 3 3 Node 3 box
## 4 4 Node 4 dot
## 5 5 Node 5 star
## 6 6 Node 6 ellipse
## 7 7 Node 7 database
## 8 8 Node 8 diamond
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드에 모양을 지정하여 노드의 모양을 원이 아닌 다른 형태로 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"));nodes
## id label shape group
## 1 1 Node 1 square A
## 2 2 Node 2 triangle B
## 3 3 Node 3 box A
## 4 4 Node 4 dot B
## 5 5 Node 5 star A
## 6 6 Node 6 ellipse B
## 7 7 Node 7 database A
## 8 8 Node 8 diamond B
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
그룹을 지정하여 노드의 색상을 그룹에 따라 표시할 수 있다. 네트워크에서 노드들이 속한 집단을 표시 할 때 효과적이다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"));nodes
## id label shape color
## 1 1 Node 1 square darkred
## 2 2 Node 2 triangle grey
## 3 3 Node 3 box orange
## 4 4 Node 4 dot darkblue
## 5 5 Node 5 star purple
## 6 6 Node 6 ellipse red
## 7 7 Node 7 database blue
## 8 8 Node 8 diamond pink
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드의 색상도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"));nodes
## id label shape group color
## 1 1 Node 1 square A darkred
## 2 2 Node 2 triangle B grey
## 3 3 Node 3 box A orange
## 4 4 Node 4 dot B darkblue
## 5 5 Node 5 star A purple
## 6 6 Node 6 ellipse B red
## 7 7 Node 7 database A blue
## 8 8 Node 8 diamond B pink
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
그룹과 색상을 같이 사용할 경우 색상이 그룹보다 우선을 적용된다. 두 요소를 같이 사용하는 것보다 따로 사용하는 것이 좋다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape color shadow
## 1 1 Node 1 square darkred FALSE
## 2 2 Node 2 triangle grey TRUE
## 3 3 Node 3 box orange FALSE
## 4 4 Node 4 dot darkblue TRUE
## 5 5 Node 5 star purple TRUE
## 6 6 Node 6 ellipse red TRUE
## 7 7 Node 7 database blue FALSE
## 8 8 Node 8 diamond pink TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드의 그림자도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9));edges
## from to label
## 1 1 5 Edge 1
## 2 6 3 Edge 2
## 3 2 5 Edge 3
## 4 3 7 Edge 4
## 5 4 7 Edge 5
## 6 7 1 Edge 6
## 7 1 4 Edge 7
## 8 6 2 Edge 8
## 9 1 8 Edge 9
visNetwork(nodes, edges, width = "100%")
엣지에 이름을 지정하여 선 위에 각 엣지의 정보를 나타낼 수 있다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100));edges
## from to label length
## 1 1 5 Edge 1 100
## 2 6 3 Edge 2 200
## 3 2 5 Edge 3 300
## 4 3 7 Edge 4 400
## 5 4 7 Edge 5 300
## 6 7 1 Edge 6 200
## 7 1 4 Edge 7 100
## 8 6 2 Edge 8 500
## 9 1 8 Edge 9 100
visNetwork(nodes, edges, width = "100%")
각 엣지의 길이도 변경 할 수 있다. 네트워크에서 노드간의 유사성이 높은 경우 엣지의 길이를 짧게, 노드간의 유사성이 낮은 경우 엣지의 길이를 길게 시각화한다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4));edges
## from to label length width
## 1 1 5 Edge 1 100 4
## 2 6 3 Edge 2 200 1
## 3 2 5 Edge 3 300 3
## 4 3 7 Edge 4 400 2
## 5 4 7 Edge 5 300 4
## 6 7 1 Edge 6 200 1
## 7 1 4 Edge 7 100 2
## 8 6 2 Edge 8 500 3
## 9 1 8 Edge 9 100 4
visNetwork(nodes, edges, width = "100%")
각 엣지의 굵기도 변경 할 수 있다. 네트워크에서 노드간의 유사성이 높은 경우 엣지의 굵기를 굵게, 노드간의 유사성이 낮은 경우 엣지의 굵기를 얇게 시각화한다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"));edges
## from to label length width arrows
## 1 1 5 Edge 1 100 4 to
## 2 6 3 Edge 2 200 1 from
## 3 2 5 Edge 3 300 3 middle
## 4 3 7 Edge 4 400 2 middle;to
## 5 4 7 Edge 5 300 4 to
## 6 7 1 Edge 6 200 1 from
## 7 1 4 Edge 7 100 2 middle
## 8 6 2 Edge 8 500 3 middle;to
## 9 1 8 Edge 9 100 4 middle
visNetwork(nodes, edges, width = "100%")
노드들 사이의 관계의 방향성을 지정 할 수 있다. - to
:
노드 1 -> 노드 5 - from
: 노드 3 -> 노드 6 -
middle
: 노드 2 -> 노드 5 (기본적인 화살표 방향은 to와
같지만 엣지의 중간에 에로우를 생성한다.) - middle;to
: 노드
3 -> 노드 7 (기본적인 화살표 방향은 to와 같고 엣지의 중간과 끝 부분에
에로우를 생성한다.)
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE));edges
## from to label length width arrows dashes
## 1 1 5 Edge 1 100 4 to FALSE
## 2 6 3 Edge 2 200 1 from FALSE
## 3 2 5 Edge 3 300 3 middle FALSE
## 4 3 7 Edge 4 400 2 middle;to FALSE
## 5 4 7 Edge 5 300 4 to FALSE
## 6 7 1 Edge 6 200 1 from FALSE
## 7 1 4 Edge 7 100 2 middle FALSE
## 8 6 2 Edge 8 500 3 middle;to TRUE
## 9 1 8 Edge 9 100 4 middle FALSE
visNetwork(nodes, edges, width = "100%")
엣지들중 중요한 역할을 하는 엣지를 표시하기 위해 해당 선을 점선으로 바꾸어 시각화 할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE));edges
## from to label length width arrows dashes shadow
## 1 1 5 Edge 1 100 4 to FALSE FALSE
## 2 6 3 Edge 2 200 1 from FALSE TRUE
## 3 2 5 Edge 3 300 3 middle FALSE FALSE
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE
## 5 4 7 Edge 5 300 4 to FALSE FALSE
## 6 7 1 Edge 6 200 1 from FALSE TRUE
## 7 1 4 Edge 7 100 2 middle FALSE FALSE
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE
## 9 1 8 Edge 9 100 4 middle FALSE TRUE
visNetwork(nodes, edges, width = "100%")
엣지의 그림자도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%")
엣지의 컬러도 지정해서 변경이 가능하다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, main = "R을 사용한 네트워크 시각화", width = "100%")
visNetwork
의 요소중 main
기능에 텍스트를
추가하면 제목이 생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, main = "R을 사용한 네트워크 시각화", submain = "조선시대사학회", width = "100%")
visNetwork
의 요소중 submain
기능에 텍스트를
추가하면 부제목이 생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, footer = "Fig.1 R을 사용한 네트워크 시각화", width = "100%")
visNetwork
의 요소중 footer
기능에 텍스트를
추가하면 시각화의 아래쪽에 텍스트가 생성되고 캡션의 역할을 할 수
있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%") %>% visLegend()
dplyr
에서 지원하는 파이프를 사용하여
visLegend()
를 visNetwork()
와 같이 실행하면
자동으로 노드의 그룹에 따라 범례를 생성하여 준다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%") %>% visLegend(position = "right", main = "범례")
visLegend()
의 요소인 position
과
main
을 통해 범례의 위치와 제목을 생성할 수 있다.
nodes <- jsonlite::fromJSON("https://raw.githubusercontent.com/datastorm-open/datastorm-open.github.io/master/visNetwork/data/nodes_miserables.json")
edges <- jsonlite::fromJSON("https://raw.githubusercontent.com/datastorm-open/datastorm-open.github.io/master/visNetwork/data/edges_miserables.json")
visNetwork(nodes, edges, height = "700px", width = "100%")
실제 데이터(data.frame)에서 각 노드와 엣지에서 사용하는 요소들로 열을
만들고 visNetwork()
에 데이터를 적용하여 네트워크를 생성 할
수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group")
visOptions()
을 통해 그룹 별로 네트워크를 확인 할 수 있는
옵션을 생성할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE)
visOptions()
을 통해 흥미로운 노드와 그 노드와 직접적으로
관계를 맺는 주변 노드를 확인하는 기능을 highlightNearest
를
통해 구현 할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE)
nodesIdSelection
을 통해 노드의 이름을 선택하는 옵션을
생성하고 이 기능을 통해 선택된 노드와 그 노드와 직접적으로 관계를 맺는
주변 노드를 확인 할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE) %>% visPhysics(stabilization = FALSE)
visPhysics()
에서 stabilization
을
FALSE
로 지정하면 네트워크가 초기 생성될때 노드간의 상호
중력을 계산하는 과정을 모두 볼 수 있어 네트워크에 더 동적인 효과를 줄 수
있다.
# getwd()
# setwd("/Users/seongminmun/Desktop/Development/Rprogram/R_Script/data/")
# dir()
현재 R과 연결된 자신의 작업 환경 경로를 확인하고 데이터가 있는 경로로 지정한다.
node <- read.csv("node_teajo.csv", header=TRUE, fileEncoding="UTF-8"); head(node)
## X id label group city
## 1 0 0 태조 0 개경
## 2 1 1 신혜왕후유씨_태조1 1 정주
## 3 2 2 유천궁 1 정주
## 4 3 3 정덕왕후유씨_태조6 1 정주
## 5 4 4 유덕영 1 정주
## 6 5 5 장화왕후오씨_태조2 2 나주
필요하지 않은 정보들도 포함되어 있는 것을 확인 할 수 있다.
node <- node[,c(2,3,4)]; head(node)
## id label group
## 1 0 태조 0
## 2 1 신혜왕후유씨_태조1 1
## 3 2 유천궁 1
## 4 3 정덕왕후유씨_태조6 1
## 5 4 유덕영 1
## 6 5 장화왕후오씨_태조2 2
필요없는 열은 제거하고 데이터를 저장한다.
edge <- read.csv("edge_teajo.csv", header=TRUE, fileEncoding="UTF-8"); head(edge)
## X from to from_kor to_kor
## 1 0 0 1 태조 신혜왕후유씨_태조1
## 2 1 0 2 태조 유천궁
## 3 2 1 2 신혜왕후유씨_태조1 유천궁
## 4 3 0 3 태조 정덕왕후유씨_태조6
## 5 4 0 4 태조 유덕영
## 6 5 3 4 정덕왕후유씨_태조6 유덕영
필요하지 않은 정보들도 포함되어 있는 것을 확인 할 수 있다.
edge <- edge[,c(2,3)]; head(edge)
## from to
## 1 0 1
## 2 0 2
## 3 1 2
## 4 0 3
## 5 0 4
## 6 3 4
필요없는 열은 제거하고 데이터를 저장한다.
visNetwork(node, edge, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE) %>% visPhysics(stabilization = FALSE)
실제 가공된 역사 데이터(data.frame
)에서 고려 초기 태조
왕건이 어떤 지방 호적들과 혼인 네트워크를 형성하였는지 확인할 수
있다.