Как нарисовать два дерева в одном графике с помощью графика, чтобы одно сверху вниз, а другое снизу вверх - PullRequest
0 голосов
/ 03 мая 2018

У меня есть орграф

digraph BST {
subgraph{
s00  [ label = "s00" ]; 
s00 -> { s10 s11 s12}; 
s10  [ label = "s10" ]; 
s10 -> { s22 s23 }; 
s11  [ label = "s11" ]; 
s11 -> { }; 
s12  [ label = "s12" ]; 
s12 -> { }; 
s22  [ label = "s22" ]; 
s22 -> { }; 
s23  [ label = "s23" ]; 
s23 -> { s30 s31 }; 
s30  [ label = "s30" ]; 
s30 -> { }; 
s31  [ label = "s31" ]; 
s31 -> { }; 
}

subgraph{
g00  [ label = "g00" ]; 
g00 -> { g10 g11 g111 }; 
g10  [ label = "g10" ]; 
g10 -> { }; 
g11  [ label = "g11" ]; 
g11 -> { }; 
g111  [ label = "g111" ]; 
g111 -> { g20 }; 
g20  [ label = "g20" ]; 
g20 -> { g30 g31 g32 }; 
g30  [ label = "g30" ]; 
g30 -> { }; 
g31  [ label = "g31" ]; 
g31 -> { }; 
g32  [ label = "g32" ]; 
g32 -> { }; 
}

}

как сделать так, чтобы дерево начиналось с инверсии g00 (растёт снизу вверх) , и узел s00 имеет то же значение координаты x с g00 (выровнено по вертикали), и добавил ребро от g31 до s30.

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете сделать это, используя атрибут dir ребер в данном подграфе, например:

digraph {
    subgraph{
        node [fillcolor = red, style = filled]
        s00 -> { s10 s11 s12}; 
        s10 -> { s22 s23 }; 
        s23 -> { s30 s31 }; 
    }
    subgraph{
        edge [dir = back]
        node [fillcolor = blue, style = filled]
        { g10 g11 g111 } -> g00;
        { g20 } -> g111; 
        { g30 g31 g32 } -> g20; 
    }
}

Я немного упростил ваш код и использовал цвета для разметки различных графиков. Это будет выглядеть так при использовании точечного макета: Graph

Edit: Чтобы «сдвинуть» один из подграфов вверх, вы можете вставить пару невидимых узлов (сколько бы уровней вы ни хотели сместить):

digraph {
    subgraph{
        node [fillcolor = red, style = filled]
        {
            node [style = invis]
            invis1 invis2 invis3
        }
        invis1 -> invis2 -> invis3 -> s00 [style = invis]
        s00 -> { s10 s11 s12}; 
        s10 -> { s22 s23 }; 
        s23 -> { s30 s31 }; 
    }
    subgraph{
        edge [dir = back]
        node [fillcolor = blue, style = filled]
        { g10 g11 g111 } -> g00;
        { g20 } -> g111; 
        { g30 g31 g32 } -> g20; 
    }
}

выглядит так: График

...