Могу ли я минимизировать длину дуги в точечной диаграмме?
У меня довольно ограниченный точечный график, который выходит не так, как я хочу.
Графики предназначены для представления динамической байесовской сети и имеют произвольное количество временных интервалов. Мне нужно, чтобы все узлы в одном временном интервале были упорядочены по вертикали в одном и том же подграфе, а каждый подграф должен быть выровнен по горизонтали и предпочтительно равноудаленно.
Ниже приведен беспорядочный DBN, сгенерированный кодом в нижней части этого вопроса - это относительно простой пример, но он должен проиллюстрировать проблему. Я бы предпочел, чтобы дуги от подграфа 't-1' до 't' и подграфа от 't' до 't+1' выглядели одинаково, и избегали бы зацикливания дуг, подобных 'c(t-1)' to 'e(t)', а также имеют подграфы на равном расстоянии.
Настройка веса 'c (t-1)' на 'e (t)' ничего не делает, и код для генерации этого файла точек должен быть общим.
Я не привязан к точке, если есть лучшая программа для этого типа проблемы.
Код для генерации графика:
digraph G {
1 [ label = "a(t-1)" ];
2 [ label = "b(t-1)" ];
3 [ label = "c(t-1)" ];
4 [ label = "d(t-1)" ];
5 [ label = "e(t-1)" ];
6 [ label = "a(t)" ];
7 [ label = "b(t)" ];
8 [ label = "c(t)" ];
9 [ label = "d(t)" ];
10 [ label = "e(t)" ];
11 [ label = "a(t+1)" ];
12 [ label = "b(t+1)" ];
13 [ label = "c(t+1)" ];
14 [ label = "d(t+1)" ];
15 [ label = "e(t+1)" ];
rankdir=TB
edge[style=invis];
{
rank=same;
K_1 [style=invis] ;
K_2 [style=invis] ;
K_3 [style=invis] ;
K_1 -> K_2 ;
K_2 -> K_3 ;
}
subgraph cluster1 {
style=dotted ;
1 -> 2;
2 -> 3;
3 -> 4;
4 -> 5;
label="t-1" ;
}
subgraph cluster2 {
style=dotted ;
6 -> 7;
7 -> 8;
8 -> 9;
9 -> 10;
label="t" ;
}
subgraph cluster3 {
style=dotted ;
11 -> 12;
12 -> 13;
13 -> 14;
14 -> 15;
label="t+1" ;
}
K_3 -> 11[style=invis] ;
K_2 -> 6[style=invis] ;
K_1 -> 1[style=invis] ;
edge[constraint=false,style=solid] ;
3 -> 10 ;
8 -> 15 ;
}
1 ответ
Нашел ответ сам.
Изменил направление ранга на LR и использовал порядок появления для упорядочения в подграфе.
digraph G {
rankdir=LR
edge[style=invis];
subgraph cluster1 {
style=dotted ;
rank=same ;
K_1 [ style=invis ] ;
1 [ label = "a(t-1)" ];
2 [ label = "b(t-1)" ];
3 [ label = "c(t-1)" ];
4 [ label = "d(t-1)" ];
5 [ label = "e(t-1)" ];
label="t-1" ;
}
subgraph cluster2 {
style=dotted ;
rank=same ;
K_2 [style=invis] ;
6 [ label = "a(t)" ];
7 [ label = "b(t)" ];
8 [ label = "c(t)" ];
9 [ label = "d(t)" ];
10 [ label = "e(t)" ];
label="t" ;
}
subgraph cluster3 {
style=dotted ;
rank=same ;
K_3 [style=invis] ;
11 [ label = "a(t+1)" ];
12 [ label = "b(t+1)" ];
13 [ label = "c(t+1)" ];
14 [ label = "d(t+1)" ];
15 [ label = "e(t+1)" ];
label="t+1" ;
}
K_1 -> K_2 -> K_3 ;
edge[constraint=false,style=solid] ;
3 -> 10 ;
8 -> 15 ;
}