我目前正在用Java寫一個圖庫,並且我想要一個工具來可視化一些圖。我發現了Graph-viz,這是一個很好的 - 雖然是錯誤的方式 - 這樣做。Graphviz(xdot):如何製作遞歸節點?
在我的模型,圖表是由節點和邊緣。每個節點有一定數量的端口(I/O/IO)和邊緣鏈接那些端口在一起。一些特殊的節點被稱爲GraphNode並嵌入了一個圖。這些端口這些圖表節點被映射到一些端口的內部節點。
我想提供幾種表示形式。他們的第一,與我滿意,如下:http://i.stack.imgur.com/ujU71.png
輸入端口以綠色來表示,紅色輸出的,而在藍色輸入輸出的。
在此表示,在GraphNodes沒有擴展並顯示一樣簡單節點。在第二個版本中,我想創建如下圖所示的內容:http://i.stack.imgur.com/Cx624.png
問題是我無法設法創建具有固定區域的子圖(集羣)(它似乎不是可能)。我嘗試的另一個解決方案是將圖形嵌入到節點中。然而,插入一些代碼轉換成HTML標籤的<td> </td>
部分不評估代碼:
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「端口放置在陌生的地方的時候。
你知道我如何達到目標圖形佈局嗎?如有需要,請詢問任何其他信息。
編輯:我依然沒有找到任何解決方案。處理這種情況的一種方法是能夠修復包含集羣內給定節點的位置,但似乎不可能用「點」佈局。任何想法 ?
我把它放在你的腿上,因爲我現在必須跑。讓我知道如果有問題(細節),我可以添加到答案... –
嗨!感謝您的回答,對不起,我以前無法測試它。然而,我無法設法讓它運行。看起來Python在撤回屬性「寬度」方面失敗了。你用什麼版本的Xdot來形象化它(我的是0.4)?或者另一個軟?無論如何,你的答案對我來說看起來很完美! –
我用graphviz直接渲染。點 - graphviz版本2.26.3 –