Я использую пакет DiagrammeR
R для рисования блок-схемы, и ниже приведен код, используемый для создания фиктивного примера:
library(DiagrammeR)
grViz("digraph flowchart {
# node type 1: starting and ending node
node [fontname = Helvetica, shape = oval]
start [label = '@@1']
node [fontname = Helvetica, shape = oval]
pro2 [label = '@@6']
# node type 2: decision
node [fontname = Helvetica, shape = diamond]
dec1 [label = '@@2']
dec2 [label = '@@3']
node [fontname = Helvetica, shape = diamond]
dec3 [label = '@@4']
# node type 3: process
node [fontname = Helvetica, shape = rectangle]
pro1 [label = '@@5']
node [fontname = Helvetica, shape = rectangle]
pro3 [label = '@@7']
# specify which nodes are of the same 'rank' so that they'll be drawn at the same level
{rank = same; dec2 pro3}
{rank = same; pro1 dec3}
# edge definitions with the node IDs
edge[tailclip = true, headclip = true];
start -> dec1
dec1 -> dec2 [fontname = Helvetica, label = '', headport = 'n', tailport = 's']
dec1 -> pro3 [fontname = Helvetica, label = '', headport = 'n', tailport = 'e']
dec2 -> pro1 [fontname = Helvetica, label = '', tailport = 's']
dec2 -> pro3 [fontname = Helvetica, label = '']
pro3 -> dec3 [fontname = Helvetica, label = '', headport = 'n']
dec3 -> pro2 [fontname = Helvetica, label = '', headport = 'n', tailport = 's']
dec3 -> pro3 [fontname = Helvetica, label = '', headport = 'e', tailport = 'e']
pro1 -> dec1 [fontname = Helvetica, label = '', headport = 'w']
}
[1]: 'START'
[2]: 'decision 1'
[3]: 'decision 2'
[4]: 'decision 3'
[5]: 'process 1'
[6]: 'END'
[7]: 'process 3'
")
Созданная блок-схема выглядит так: Я надеюсь, что
- процесс 1 можно выровнять по вертикали, как СТАРТ, решение 1 и решение 2 выше (в настоящее время он расположен слева, что выглядит неуклюже; также стрелка от решения 2 к процессу 1 должна быть прямой, а не изогнутой...
- решение 3 и END можно выровнять по вертикали, как процесс 3 выше; также стрелка от процесса 3 к решению 3 должна быть прямой, а не изогнутой...
- Хорошо иметь, но не обязательно: есть ли способ превратить изогнутую стрелку в прямую стрелку? Например, я надеюсь, что конец стрелки будет начинаться с западной стороны процесса 1, немного выпрямляться по горизонтали, а затем прямо вертикально до того же уровня, что и решение 1, и, наконец, прямо горизонтально, чтобы указывать на западную сторону решения 1...
Спасибо за помощь!
{rankdir='TB'; start -> dec1 -> dec2 -> pro1}; {rankdir='TB'; pro3 -> dec3 -> pro2};
делает то, что вы хотите (вам нужно будет удалить другие ребра). В отношении 3 вам, вероятно, нужно добавить фиктивный/невидимый узел (это условия поиска) - person user20650   schedule 30.12.2020