2017-10-18 1 views
2

나는 다음과 같은 장난감의 예와 같이 diagrammer와 네트워크 그래프, 플롯 ...다이어그램으로 엣지 크로싱 수를 최소화하는 방법, R?

library(DiagrammeR) 
Dia <- function(edg, nodesd) { 
     nodes <- create_node_df( n=length(nodesd), label=nodesd, 
     width=0.3) 
     edges <- create_edge_df(from = edg$EveFrom, to = edg$EveTo, 
       rel = "leading_to") 
graph <- create_graph( nodes_df = nodes, edges_df = edges) 
render_graph(graph) 
} 


niv <- c("A","B","C","D","E","X","Y") 

temp <- data.table(EveFrom=factor(c("A","A","A","A","B","C","D","E", 
    "X", "B"), levels=niv), 
EveTo=factor(c("B","C","D","E","X","X","Y","Y","Y", "C"), levels=niv)) 

Dia(temp,niv) 

enter image description here

어떻게 자동으로 에지 교차점의 수를 최소화하기 위해 diagrammer 알 수 있습니까?

이 간단한 예에서 C 및 B 위치가 바뀌면 결과에 가장자리가 교차하지 않습니다. 더 복잡한 예에서는 모든 교차점을 제거 할 수는 없지만 최소 교차점은 최소화합니다.

visnetwork으로 나는 노드

enter image description here

을 재배치 할 수 있습니다하지만 당신이 벡터 그래픽으로 수출하지 않는 예를 들어, 다른 단점이 있습니다.

PD는 : enter image description here enter image description here

답변

1

내가 dot 레이아웃이 더 잘 생성 할 것이라고 생각 :이 (숨겨진 레이블) bergant 용액으로 출력됩니다. 이 같은 전역 속성을 추가합니다 (here에서 영감로 만든)

graph <- create_graph( nodes_df = nodes, edges_df = edges) 
graph <- set_global_graph_attrs(graph, "layout", "dot", "graph") 
graph <- add_global_graph_attrs(graph, "rankdir", "LR", "graph") 

g

+0

이 내 visnetwork 결과를 모방하는 것도 가능을? (예 : 각 가장자리에 레이블을 추가하거나 가장자리 너비를 변경) – skan

+1

레이블 : 예,'create_edge_df' (문자열의 벡터)에'label' 인수를 추가하십시오. – bergant

+0

너비 : 예 :'penwidth' = 3 사용 – bergant

1

사용 dot 레이아웃 옵션

# install.packages(c("DiagrammeR"), dependencies = TRUE) 
library(DiagrammeR) 

grViz(" 
digraph dot { 

graph [layout = dot] # dot, neato, twopi, and circo 

A -> {B C D E} 
B -> {C X} 
C -> {X} 
D -> {Y} 
E -> {Y} 
X -> {Y} 
}") 

dot layoutttt

+0

순환 배치가 필요한 경우 명령 줄은 무엇입니까? 또는 어떻게 좌표에 위치를 고정시킬 수 있습니까? 내가 본 (create_node_df with x = 및 y =) 유일한 옵션은 render_graph (graph, output = "visNetwork")를 사용할 때만 작동하는 것으로 보이지만 그 출력은 vectorial plot으로 저장할 수 없습니다. – skan

+0

새로운 질문을하는 것이 좋습니다. 한 가지만 생각하고이 질문과 답변을 참조로 사용하십시오. –

관련 문제