Предотвращение графвиза от перестановки узлов - PullRequest
18 голосов
/ 07 февраля 2012

Я пытаюсь визуализировать древовидную структуру, используя graphviz, проблема в том, что граф становится больше. Graphviz начинает перестраивать порядок узлов.Скажем, у меня есть следующее:

  A
/ | \
B C D

становится,

  A
/ | \
B D C

это, вероятно, делает это для экономии места, но в моем контексте порядок узлов имеет значение, которое я пытался добавить,

graph [ordering="out"];

но это не изменило вывод.

РЕДАКТИРОВАТЬ:

digraph bt {
graph [ordering="out"];
node [style="rounded", shape=box]
N_2386 -> N_2387
N_2387 -> N_2388
N_2388 -> N_2389
N_2388 -> N_2390
N_2387 -> N_2391
N_2386 -> N_2392
subgraph cluster_2393 {
labeljust = "l";
style=dashed;color="#B0B0B0"
N_2392 -> N_2394
N_2394 -> N_2395
N_2395 -> N_2396
N_2396 -> N_2397
N_2397 -> N_2398
N_2397 -> N_2399
N_2396 -> N_2400
N_2400 -> N_2401
N_2400 -> N_2402
N_2395 -> N_2403
N_2403 -> N_2404
N_2404 -> N_2405
N_2405 -> N_2406
N_2403 -> N_2407
N_2407 -> N_2408
N_2408 -> N_2409
N_2409 -> N_2410
N_2410 -> N_2411
N_2411 -> N_2412
N_2412 -> N_2413
N_2412 -> N_2414
N_2412 -> N_2415
N_2411 -> N_2416
N_2416 -> N_2417
N_2416 -> N_2418
N_2416 -> N_2419
N_2408 -> N_2420
N_2408 -> N_2421
N_2403 -> N_2422
N_2395 -> N_2423
N_2392 -> N_2424
}
}

рассматриваемый график Что мне нужно, N_2387 должен быть справа N_2392 должен быть включенлевый.В каком порядке я их вставляю.

Ответы [ 4 ]

8 голосов
/ 07 февраля 2012

Я попробовал следующее

digraph g {
  ordering=out ;
  node [shape=box] ;

  a -> b ;  a -> c ;  a -> d ;  a -> e ;  a -> f ;
  a -> g ;  a -> h ;  a -> i ;  a -> j ;  a -> k ;
  a -> l ;  a -> m ;  a -> n ;  a -> o ;  a -> p ;
  a -> q ;  a -> r ;  a -> s ;  a -> t ;  a -> u ;
  a -> v ;  a -> w ;  a -> x ;  a -> y ;  a -> z ;
}

и все узлы b - z находятся на одном уровне в правильном порядке. Какую версию вы используете?

3 голосов
/ 08 июня 2012

Если вы хотите контролировать порядок определенных элементов, используйте невидимое ребро между ними.Комбинируя это с директивой rank , вы получаете много контроля.

Например: вот пример tagcloud макета от Graphviz:

/*
Using a graph and relationships just to push things onto different lines.
Two layout rules:
1) all items on a given line go into a "rank=same" phrase 
2) a relationship is needed between the first word on each line and the next line down to
   force the vertical alignment.
*/
digraph {
    edge[style=invisible]
    node[shape=none]

    fred [fontsize=18]
    harry [fontsize=8]
    jack [fontsize=12]
    sally [fontsize=12]
    mika
    amy
    jan
    jack -> fred
    fred -> mika
    {rank=same;fred;harry}
    {rank=same;mika amy; jan}
}
1 голос
/ 07 февраля 2012

Если вы измените первую ветвь на подграф, два подграфа будут упорядочены так, как написано в файле.

Кажется, что подграф как более высокий приоритет, чем обычный узел, и поэтому ordering=out, похоже, не соблюдается.

Это работает:

digraph bt {
  graph [ordering="out"];
  node [style="rounded", shape=box]
  N_2386 -> N_2387
  subgraph cluster_first {
    N_2387 -> N_2388
    N_2388 -> N_2389
    N_2388 -> N_2390
    N_2387 -> N_2391
  }
  N_2386 -> N_2392
  subgraph cluster_2393 {
    labeljust = "l";
    style=dashed;color="#B0B0B0"
    N_2392 -> N_2394
    N_2394 -> N_2395
    N_2395 -> N_2396
    N_2396 -> N_2397
    N_2397 -> N_2398
    N_2397 -> N_2399
    N_2396 -> N_2400
    N_2400 -> N_2401
    N_2400 -> N_2402
    N_2395 -> N_2403
    N_2403 -> N_2404
    N_2404 -> N_2405
    N_2405 -> N_2406
    N_2403 -> N_2407
    N_2407 -> N_2408
    N_2408 -> N_2409
    N_2409 -> N_2410
    N_2410 -> N_2411
    N_2411 -> N_2412
    N_2412 -> N_2413
    N_2412 -> N_2414
    N_2412 -> N_2415
    N_2411 -> N_2416
    N_2416 -> N_2417
    N_2416 -> N_2418
    N_2416 -> N_2419
    N_2408 -> N_2420
    N_2408 -> N_2421
    N_2403 -> N_2422
    N_2395 -> N_2423
    N_2392 -> N_2424
  }
}
0 голосов
/ 20 июля 2017

Graphviz предназначен для создания графиков с приятным внешним видом. Попытка принудительной компоновки приводит к потере значимости инструмента.

Как уже отмечалось, невидимые ребра могут использоваться для обеспечения некоторого расположения, и лексикографическое упорядочение (более ранние узлы, как правило, располагаются больше слева) также может указывать на предпочтение.

Как правило, добавление дополнительных ограничений к макету приводит к извращенным макетам, которые невероятно трудно устранить.

Некоторое отклонение от ожидаемого макета не должно автоматически приводить к форсированию результата. Меньшее количество ограничений делает сгенерированные графики хорошо выглядящими, поскольку они меняются со временем, даже если они могут радикально изменить внешний вид.

...