Как добавить верхние и нижние метки для точечного графика?

#doxygen #graphviz #dot

#doxygen #graphviz #точка

Вопрос:

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

1) Наличие двух меток внутри орграфа, но отображается только последняя

2) Укладываем подграфы вертикально и пытаемся соответствующим образом разместить узлы, но это выглядело плохо и превратилось в головную боль (пример показан ниже)

 digraph D {

  subgraph cluster_p {
    label = "Top Label";
    fontname=calibri;
    fontsize=9;

    rankdir=TB
    subgraph test {
      pencolor=black
      e
    }
    subgraph cluster_c3 {
      label = "Bottom Label";
      labelloc=b;
      fontname=calibri;
      fontsize=9;
      pencolor=white
      f;
    }
    e->f;
  }
}
 

Обновление: примерно через два часа после публикации этого я, наконец, нашел что-то, что соответствует моим потребностям.

 digraph G {
    subgraph cluster_0 {
        label="Top";
        subgraph cluster_1 {
            label="Bottom";
            labelloc=b;
            pencolor=white;

            // diagram to enclose
            e->f;
        }
    }
}
 

Это достаточно просто для автоматической вставки с помощью скрипта python в каждый точечный файл и поддерживает мои конкретные потребности. Спасибо.

Комментарии:

1. Я думаю, что здесь у нас есть 2 вопроса в 1. 1) как возможно иметь отворот вверху / внизу внутри «точечного» графика, т.Е. Более или менее «заголовок». 2) вопрос о doxygen, но вопрос здесь в том, к какому типу графиков вы имеете в виду, т. Е. Автоматически генерируемые doxygen графики (например, графики вызовов / вызывающих абонентов) или графики, которые вы добавляете с помощью команды типа dot или dotfile . В последнем случае это тот же вопрос, что и 1). Пожалуйста, объясните, чего именно вы хотите.

2. Привет, Альберт, извини, я не выразился яснее. Точечные файлы, о которых я говорю, представляют собой автоматически сгенерированные doxygen графики, в частности графики вызовов.

3. @dany уже дал возможное решение первой проблемы. Автоматически сгенерированные файлы на данный момент невозможны, но также остается неясным: должен ли текст быть одинаковым для всех графиков или отличаться для каждого графика. Кроме того, я предполагаю, что, хотя вы говорите «конкретно графики вызовов», это должно быть возможно для всех типов сгенерированных графиков. Вопрос, конечно, в том, о каких текстах вы думаете, или это всегда должен быть свободный текст. Пожалуйста, укажите свои требования / разъяснения в вопросе, а не в комментариях.

Ответ №1:

Вы можете оставить одну метку вверху и имитировать другую метку, добавив узел в конце внутри подграфа с rank= sink attribute . Этот атрибут заставляет узлы, которые определены внутри него, появляться не только в самом низком ранге, но и в ранге после этого. Это гарантирует, что они будут в самом низу, именно то, что вам нужно:

 digraph D {
    pencolor=black
    labelloc=t
    fontname=calibri
    fontsize=9
    label = "Top Label"

    e
    e->f;

    {
        rank=sink
        bottomlabel [
          shape=plain
          label = "Bottom Label"
          fontname=calibri
          fontsize=9
        ]
    }
}