Graphviz граф позиционирования xlabels

Я пытался использовать xlp и также следовал этому потоку graphviz ( http://www.graphviz.org/content/how-use-xlp-attribute-positioning-external-labels-xlabel), но ни один из них на самом деле не работал.

Это мой точечный код:

digraph {
    forcelabels=true;
    rankdir=LR;
    graph[ranksep=1,nodesep=.5];
    node[shape=box];
    "start" [xlabel="start",xlp="0,0",shape=doublecircle,label=" "];
    "requested"->"fault";
    "requested"->"progress";
    "start"->"requested";
    "progress"->"fault";
    "progress"->"progress";
    "progress"->"complete";
    "fault" [xlabel="fault",shape=doublecircle,label=" "];
    "complete" [xlabel="complete",shape=doublecircle,label=" "];
}

И вот как это выглядит:введите описание изображения здесь

В идеале, start,fault и complete должны быть расположены непосредственно под узлами, но я не могу правильно позиционировать xlabels.

3 ответа

Решение

Если вы используете neato с -n2 флаг, вы должны быть в состоянии установить положение xlabel, Вы должны будете указать положение каждого узла.

Так что, если у вас есть файл с именем lb.gv со следующим содержанием:

digraph{
    forcelabels=true;
    rankdir=LR;
    graph[ranksep=1,nodesep=.5,margin=0.3,bgcolor=Transparent];

    node[shape=box];
    start [pos="0,0", xlp="23,54", xlabel=start, shape=doublecircle, label= " "];
    requested [pos="100,0"];
    progress [pos="250,-66"];
    fault [pos="400,70", xlp="424,124", xlabel=fault, shape=doublecircle,label= " "];
    complete [pos="400,-66", xlp="424,-10", xlabel=complete, shape=doublecircle,label= " "];
    requested->fault;
    requested->progress;
    start->requested;
    progress->fault;
    progress:w->progress:_;
    progress->complete;
}

Вы могли бы бежать neato -n2 -Tpng lb.gv > test.png

Вот что я получил:

Graphviz

  • Используйте новые строки в строке метки , чтобы поместить текст ниже узла
  • установите fixedsize=true , чтобы сохранить размер узла по умолчанию
  • добавить кластер , чтобы самые низкие метки не усекались
      digraph {
    rankdir=LR;
    graph[ranksep=1,nodesep=.5];
    //  add a cluster to provide "margin" for labels below nodes
    subgraph cluster_space {
      graph [peripheries=0]
      node[shape=box];
      // dot ignores xlp
      // add newlines to shift label down
      // fixedsize=true to keep node sized correctly
      "start" [label="\n\n\n\nstart" shape=doublecircle fixedsize=true ];
      "requested"
      "progress"
      "complete" [label="\n\n\n\ncomplete" shape=doublecircle fixedsize=true]
      "fault" [label="\n\n\n\nfault" shape=doublecircle fixedsize=true]

      "requested"->"fault";
      "requested"->"progress";
      "start"->"requested";
      "progress"->"fault";
      "progress"->"progress";
      "progress"->"complete";
    }
}

Предоставление:

Не совсем то, что вы спрашиваете, но вы можете попробовать что-то вроде:

      digraph nodes_as_labels {
    rankdir=LR;
    graph[ranksep=1,nodesep=.5];
    node[shape=box];

    "start" [xlp="0,0",shape=doublecircle,label=" "];
    "fault" [shape=doublecircle,label=" "];
    "complete" [shape=doublecircle,label=" "];
    "startlabel" [label="start",penwidth="0"];
    "faultlabel" [label="fault",penwidth="0"];
    "completelabel" [label="complete",penwidth="0"];

    "startlabel" -> "start"[style="invis"];
    "requested"->"fault";
    "requested"->"progress";
    "start"->"requested";
    "progress"->"fault";
    "progress"->"progress";
    "progress"->"complete";
    "fault" -> "faultlabel"[style="invis"];
    "complete" -> "completelabel"[style="invis"];
}

Это приводит к:

Этот подход более актуален, когда вы используете механизм размещения Neato или fdp, потому что тогда вы можете использовать атрибут len для установки расстояния между узлами, которые действуют как метка, и узлами, которые вы маркируете. Таким образом, вы можете предотвратить наложение краев надписей. К сожалению, lenАтрибут не работает для механизма точечной компоновки, который используется в примере, поэтому метки в результате находятся далеко от узлов, которые они маркируют.

Другие вопросы по тегам