Контролировать расположение узлов в графвизе (dot2tex)? - PullRequest
3 голосов
/ 19 июля 2011

Я новичок в Graphviz, и мне просто интересно, как определить относительное расположение узлов на графике. Например, если я хочу нарисовать простой треугольник «abc», где узел «a» находится вверху, а узлы «b» и «c» на одном уровне внизу, как я должен сказать graphviz, чтобы он выложил узлы по желанию?

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

graph G
{
   node [shape="circle"];
   edge [lblstyle="auto"];

   {rank=min; "a"}
   a -- b [label = "-"];
   a -- c [label = "-"];
   {rank=same; "b" "c"}
   b -- c [label = "+"];
}

но выходные данные размещают узлы 'a' и 'b' на одном уровне сверху, с узлом 'c' внизу.

Кроме того, возможно ли нарисовать два таких треугольника рядом (с хорошим подходящим пространством между ними) на одном графике? если да, то как это реализовано?

Большое спасибо.

1 Ответ

4 голосов
/ 19 июля 2011

, но вывод позиционирует узлы 'a' и 'b' на одном уровне на сверху, с узлом 'c' внизу.

Я на самом деле получаю a сверху, по центру над b и c (см. Изображение).

Ваша разметка, слегка упрощенная (что такое lblstyle ?), Кажется, достигает того, что вы хотите, при рендеринге с точкой:

graph G
{
   node[shape=circle];

   a -- b [label = "-"];
   a -- c [label = "-"];
   {rank=same; b -- c [label="+"];}
}

graphviz triangle FTW

Какую версию graphviz вы используете?

И иметь два треугольника рядом:

graph G
{
   node[shape=circle];
   edge[label="-"];


   a -- b;
   a -- c;
   {rank=same; b -- c [label="+"];}

   d -- e;
   d -- f;
   {rank=same; e -- f [label="+"];}
}

Однако, если что-то усложняется, может быть трудно сделать макетизацию в графическом виде в точности так, как хотелось бы. В этом и заключается сила графика - применение алгоритмов компоновки, чтобы пользователь не вмешивался.

...