簡體   English   中英

如何使用制圖器 R 最小化邊緣交叉的數量?

[英]How to minimize the number of edge crossings with 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)  

在此處輸入圖片說明

我如何告訴制圖師自動最小化邊緣交叉的數量?

在這個簡單的例子中,如果 C 和 B 位置交換,結果不會有任何邊緣交叉。 在更復雜的例子中,我們不能刪除所有交叉,但至少可以將其最小化。

使用 visnetwork 我可以重新定位節點

在此處輸入圖片說明

但它還有其他缺點,例如它不允許您將其導出為矢量圖形。

PD:這是帶有 bergant 解決方案的輸出(隱藏標簽): 在此處輸入圖片說明 在此處輸入圖片說明

我認為dot布局會產生更好的效果。 像這樣添加全局屬性:

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

使用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}
}")

點布局ttt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM