我目前正在用 Java 编写一个图形库,我想要一个工具来可视化一些图形。我发现了 Graph-viz,它恰好是一种很棒的——尽管有问题——的方式。
在我的模型中,Graphs由Nodes和Edges组成。每个节点都有一定数量的端口(I/O/IO),边缘将这些端口链接在一起。一些特殊的节点称为GraphNodes并嵌入一个Graph。这些GraphNodes的Ports映射到内部Nodes的一些Ports。
我想提供几个代表。我满意的第一个如下:http: //i.stack.imgur.com/ujU71.png
输入端口用绿色表示,输出端口用红色表示,输入-输出端口用蓝色表示。
在此表示中,GraphNodes没有展开,并且显示为简单的Nodes。在第二个版本中,我想创建如下图所示的内容: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的端口有时被放置在奇怪的位置。
你知道我怎样才能达到目标图形布局吗?如果需要,请询问任何其他信息。
编辑:我仍然没有找到任何解决方案。处理此问题的一种方法是能够修复包含集群内给定节点的位置,但“点”布局似乎不可能。任何想法 ?