В настоящее время я пишу библиотеку графов в Java, и мне нужен инструмент для визуализации некоторых графиков. Я обнаружил Graph-viz, который, случается, отличный, хотя и глючный, способ сделать это.Graphviz (xdot): Как сделать рекурсивные узлы?
В моей модели, Графы состоят из Узлов и Грани. Каждый узла имеет определенное количество портов (I/O/IO) и Edges ссылки эти портов вместе. Некоторые специальные узлы называются GraphNodes и вставляют График. В порты этих GraphNodes отображаются в некоторых портов внутренних узлов.
Я хотел бы предоставить несколько представлений. Первый из них, с которыми я доволен, выглядит следующим образом: http://i.stack.imgur.com/ujU71.png
вход Порты представлены зеленым цветом, выход из них красным цветом, а вход-выход из них в синий цвет.
В этом представлении GraphNodes не расширены и отображаются так же просто Вершины. Во второй версии я хотел бы создать что-то, что выглядит следующим образом: http://i.stack.imgur.com/Cx624.png
Проблема в том, что я не могу создать подграф (кластер) с фиксированными областями (похоже, это не так возможное). Еще одно решение, которое я пробовал, - это встроить граф в узел. Тем не менее, вставив код в <td> </td>
часть HTML этикетки не оценивает код:
digraph graph0
{
node1
[
label =
<
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="palegreen" border="1" port="port2">port2</td>
<td bgcolor="palegreen" border="1" port="port3">port3</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="skyblue" border="1" port="port5">port5</td>
</tr>
</table>
</td>
<td bgcolor="peachpuff" border="1">
subgraph clusterTest
{
nodeTest
}
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="lightpink" border="1" port="port4">port4</td>
</tr>
</table>
</td>
</tr>
</table>
>
style = "invisible"
]
}
Предыдущий код создает следующий график: http://i.stack.imgur.com/E9jQ1.png
Наконец, самое лучшее решение, которое я могу придумать это следующее: http://i.stack.imgur.com/VzS5g.png
Однако я не доволен, потому что GraphNodes "Порты расположены в странных местах иногда.
Вы знаете, как я могу достичь целевого графика? При необходимости запросите любую другую информацию.
EDIT: Я до сих пор не нашли какого-либо решения. Способ справиться с этим состоял бы в том, чтобы уметь фиксировать положение заданных узлов внутри содержащего кластера, но, похоже, это не представляется возможным с помощью «точечного» макета. Есть идеи ?
Я бросаю это на колени, потому что мне нужно бежать сейчас. Дайте мне знать, если есть вопросы (подробности), которые я могу добавить к ответу ... –
Привет! Спасибо за ваш ответ, извините, что я не мог проверить это раньше. Однако я не могу заставить его работать. Похоже, что Python терпит неудачу при получении атрибута «ширина». Какую версию Xdot вы используете для визуализации (мой - 0,4)? Или другой мягкий? Во всяком случае, ваш ответ выглядит идеально для меня! –
Я визуализировал это непосредственно с помощью графика. dot - graphviz version 2.26.3 –