2015-11-27 6 views
0

я следующее (упрощенно) график, который генерируется с помощью следующего .dot:кластера Порядок узлов в GraphViz

enter image description here

digraph Configurations { 

    subgraph cluster_1 { 
    s_0_0 [shape=circle,style=filled,fixedsize=true,width=0.5,label="0",fillcolor=yellowgreen] 
    s_0_1 [shape=circle,style=filled,fixedsize=true,width=0.5,label="1",fillcolor=yellowgreen] 
    } 
    subgraph cluster_2 { 
    s_1_0 [shape=circle,style=filled,fixedsize=true,width=0.5,label="0",fillcolor=yellowgreen] 
    s_1_1 [shape=circle,style=filled,fixedsize=true,width=0.5,label="1",fillcolor=white] 
    } 
    subgraph cluster_3 { 
    s_2_0 [shape=circle,style=filled,fixedsize=true,width=0.5,label="0",fillcolor=white] 
    s_2_1 [shape=circle,style=filled,fixedsize=true,width=0.5,label="1",fillcolor=yellowgreen] 
    } 
    subgraph cluster_4 { 
    s_3_0 [shape=circle,style=filled,fixedsize=true,width=0.5,label="0",fillcolor=white] 
    s_3_1 [shape=circle,style=filled,fixedsize=true,width=0.5,label="1",fillcolor=white] 
    } 

    s_0_1 -> s_1_1 
    s_0_0 -> s_2_0 
    s_2_1 -> s_3_1 
    s_1_0 -> s_3_0 
} 

Я хотел бы, чтобы иметь возможность иметь возможность реализовать заказ внутри подграфы, чтобы узлы каждого подграфа отображались в порядке возрастания (каждый кластер должен располагать узлы (0, 1), никогда (1, 0)). Насколько я понимаю, рандир, который был моей первой попыткой, не поддерживается в подграфах, так что это правильный способ сделать это? Я ищу решение, которое дает мне достаточно похожую компоновку (которая затем включала бы более пересекающиеся стрелки) и масштабируема, так как реальные графики будут огромными.

ответ

2

Оказывается, это может быть решена путем добавления невидимых ребер внутри и принуждать одинаковый ранг внутри графиков, например, так:


subgraph cluster_1 { 
    {rank=same; s_0_0 s_0_1} s_0_0 -> s_0_1 [style=invis] 
    s_0_0 [shape=circle,style=filled,fixedsize=true,width=0.5,label="0",fillcolor=yellowgreen] 
    s_0_1 [shape=circle,style=filled,fixedsize=true,width=0.5,label="1",fillcolor=yellowgreen] 
} 
1

Если есть больше узлов, чем 2-х узлов, необходимо изменить решение.

subgraph cluster1 { 
{ 
    HL_1_n HL_1_1 HL_1_2 HL_1_3 HL_1_m 
} 
HL_1_1 [label="Hidden Layer 1 Node 1" color=3] 
HL_1_2 [label="Hidden Layer 1 Node 2" color=3] 
HL_1_3 [label="Hidden Layer 1 Node 3" color=3] 
HL_1_m [label="Hidden Layer 1 Node ..." color=3] 
HL_1_n [label="Hidden Layer 1 Node H_1" color=3] 
label = "Hidden Layer" 

}

Кажется, порядок определяется, таким образом, мы просто должны изменить позиции Nodes', чтобы соответствовать выходной. Решение не использует граничные ограничения и ранжирование.

Смежные вопросы