В настоящее время я пытаюсь создать блок-схему с помощью DiagrammeR.
library(DiagrammeR)
grViz("
digraph g {
subgraph cluster_0 {
style=filled;
color=lightgrey;
label= To_Accrue
node [shape = rectangle, style = filled, fillcolor = Linen]
A
B
C
A->B->C
}
subgraph cluster_1 {
style=filled;
color=crimson;
label= Y
node [style=filled,color=blue, shape=folder]
1
2
3
1->2->3
}
}
")
Пожалуйста, обратитесь к ссылке Файл, чтобы увидеть, что она генерирует в данный момент (Tab-Sheet1). Мне было интересно, есть ли способ добиться желаемого результата (Tab-Desired Output).
Заранее спасибо.
Хитрость заключается в том, чтобы использовать пустой узел (здесь он называется bnode
), группы (g1
в этом примере) и ранги (rank=same ...
), чтобы задать желаемое расположение и внешний вид. Узлы с одной и той же группой должны появиться в одной вертикальной плоскости, а узлы с одинаковым рангом появятся в одной и той же горизонтальной плоскости.
library(DiagrammeR)
grViz("
digraph g {
subgraph cluster_0 {
style=filled;
color=lightgrey;
label= To_Accrue
node [shape = rectangle, style = filled, fillcolor = Linen]
bnode [style = invis, shape=point, width = 0, group=g1]
A [group=g1]
B
C [group=g1]
edge [arrowhead='none']
A->bnode
edge [arrowhead='normal']
B->bnode
bnode->C
{rank=same B bnode}
}
subgraph cluster_1 {
style=filled;
color=crimson;
label= Y
node [style=filled,color=blue, shape=folder]
1
2
3
1->2->3
}
}
")
Рад помочь. Я предупрежу вас, что этот подход не очень хорошо масштабируется (становится беспорядочным из-за множества пустых узлов, рангов и групп).
Я также отредактировал исходный код, чтобы сгенерировать следующее, чтобы приблизиться к сценарию ротации. введите описание изображения здесь
library(DiagrammeR)
grViz("
digraph g {
subgraph cluster_0 {
style=filled;
color=lightgrey;
label= To_Accrue
node [shape = rectangle, style = filled, fillcolor = Linen]
a1 [style = invis, shape=point, width = 0, group=g1]
a2 [style = invis, shape=point, width = 0, group=g2]
a3 [style = invis, shape=point, width = 0, group=g3]
A [group=g1]
B
C [group=g1]
C [group=g2]
D
E [group=g2]
edge [arrowhead='none']
A->a1
C->a2
E->a3
edge [arrowhead='normal']
B->a1 {rank=same B a1}
a1->C
D->a2 {rank=same D a2}
a2->E
F->a3 {rank=same F a3}
a3->G
}
subgraph cluster_1 {
style=filled;
color=crimson;
label= Y
node [style=filled,color=blue, shape=folder]
1
2
3
1->2->3
}
}
")
Я не знаю, как отблагодарить тебя. Я все утро ломал голову, чтобы найти решение. это мой первый пост в stackoverflow.