graphviz/dot: можно ли установить расстояние между двумя узлами индивидуально?

Я пытаюсь использовать точку (версия 2.28.0), чтобы составить блок-схему моего исходного кода. Для этого я хотел бы, чтобы граф состоял из подграфов, где каждый из этих подграфов представляет исходный файл в кодовой базе. В верхней части каждого подграфа должно быть имя файла в виде узла визуально легко различимым образом (например, жирный белый текст на темно-синем фоне). Под узлом имени файла должны быть узлы, представляющие поток подпрограмм в этом файле в том порядке, в котором они вызываются.

Теперь моя проблема заключается в том, что я хотел бы, чтобы расстояние между «узлами имени файла» и «узлами рутины» было меньше, чем расстояние между отдельными «узлами рутины», плюс между ними не должно быть стрелки.

Я попытался использовать атрибут minlen для ребра, соединяющего «узел имени файла» с первым «обычным узлом», но когда я установил для него значение ниже 1,0, два узла вышли рядом друг с другом, а не сложены.

Есть ли способ сделать первые два узла ближе друг к другу, чем два других, но ориентированными сверху/снизу?

digraph "prog.c"
{
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];
    node [fontname="FreeSans",fontsize="14",shape=record,height=0.2];
    compound=true;

    subgraph cluster_main {
        Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
        Node1_1 [label="routine1()"];
        Node1_2 [label="routine2()"];
        edge [color="transparent", minlen="0.5"]; // stacking not ok
        // edge [color="transparent", minlen="1.0"]; // stacking ok
        Node1_0 -> Node1_1 ;
        edge [color="black", minlen="1.0"];
        Node1_1 -> Node1_2 ;
    }
}

Редактировать: я должен был закомментировать строку, ведущую к нежелательному результату, а не ту, которая ведет к желаемому результату (я планировал прикрепить два png для пояснения, но мне не разрешено делать это как новичку); Итак, вот код, который я действительно хотел бы изменить таким образом, чтобы первые два узла имели другое (меньшее) расстояние от каждого, чем последние два.

digraph "prog.c"
{
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];
    node [fontname="FreeSans",fontsize="14",shape=record,height=0.2];
    compound=true;

    subgraph cluster_main {
        Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
        Node1_1 [label="routine1()"];
        Node1_2 [label="routine2()"];
        //edge [color="transparent", minlen="0.5"]; // stacking not ok
        edge [color="transparent", minlen="1.0"]; // stacking ok
        Node1_0 -> Node1_1 ;
        edge [color="black", minlen="1.0"];
        Node1_1 -> Node1_2 ;
    }
}

person lineinthesand    schedule 04.03.2014    source источник


Ответы (1)


Есть пара свойств «графа», которые могут управлять тем, что вам нужно. колодка, rankep, nodesep

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

digraph "prog.c"
{
    graph [pad=".75", ranksep="0.25", nodesep="0.25"];
    node [fontname="FreeSans",fontsize="14",shape=record,width=2, height=.5];
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];

    compound=true;

    subgraph cluster_main {
        Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
        Node1_1 [label="routine1()"];
        Node1_2 [label="routine2()"];
        edge [color="transparent", minlen="0.5"]; // stacking not ok
        // edge [color="transparent", minlen="1.0"]; // stacking ok
        Node1_0 -> Node1_1 ;
        edge [color="black", minlen="1.0"];
        Node1_1 -> Node1_2 ;
    }
}
person OldDogNewTricks    schedule 12.03.2014
comment
как это отвечает на вопрос? - person Math; 13.03.2014
comment
Извините за отсутствие ясности. При увеличении ранга до большего значения подпрограммы будут отдаляться друг от друга. - person OldDogNewTricks; 13.03.2014
comment
Мне не хватает основной части ответа на вопрос, даже если это помогает. - person wagnerpeer; 29.04.2016