如果有兩個集羣包含其他集羣的層次結構。非常酷!Pydot集羣定位
我想垂直放置兩個羣集。雖然其他帖子提出瞭如何垂直放置節點(不是羣集),但我無法獲得這個適用於羣集的信息。
大小參數不適用於我,但在任何情況下,這似乎是錯誤的答案,因爲我的python程序一般列出可能是任何大小的圖表類。我只是想把兩個集羣放在另一個集羣的頂部,大小應該是什麼。
一個簡單的例子將不勝感激。
如果有兩個集羣包含其他集羣的層次結構。非常酷!Pydot集羣定位
我想垂直放置兩個羣集。雖然其他帖子提出瞭如何垂直放置節點(不是羣集),但我無法獲得這個適用於羣集的信息。
大小參數不適用於我,但在任何情況下,這似乎是錯誤的答案,因爲我的python程序一般列出可能是任何大小的圖表類。我只是想把兩個集羣放在另一個集羣的頂部,大小應該是什麼。
一個簡單的例子將不勝感激。
我解決了這個問題。 我有兩個獨立的集羣,每個集羣都包含一系列子集羣並描繪成矩形。 如果我將這兩個集羣添加到我的圖中,它們顯示爲從左到右,但我希望它們一個在另一個之上。 如果我向每個羣集添加一個節點,讓它們處於垂直方向。它們可以在樣式修改器中變得不可見,但我使用節點作爲標籤。通過在兩個節點之間添加邊緣,兩個集羣以最明智的方式定位自己,以最小化邊緣長度,並將它們垂直重新排列。
在下面的示例中,我創建了兩個可能不需要的封閉塊,因爲您可以將一個節點添加到cluster1,另一個在cluster2中,但是我發現封閉塊使它更加整潔。
因此,例如;
#Assume cluster1 and cluser2 exist
#Create enclosing cluster box
enclosingBlock1=pydot.Cluster('eb1', label='label1',shape='rectangle')
enclosingBlock1.add_subgraph(cluster1)
# Add node to enclosing cluster
node1=pydot.Node('D1',label='Diagram1')
enclosingBlock1.add_node(node1)
#Create second enclosing block
enclosingBlock2=pydot.Cluster('eb2', label='label2',shape='rectangle')
enclosingBlock2.add_subgraph(cluster2)
# Add the node and create the joining edge
node2=pydot.Node('D2',label='Diagram2')
enclosingBlock2.add_node(node2)
edge = pydot.Edge(node1,node2)
graph.add_subgraph(enclosingBlock1)
graph.add_subgraph(enclosingBlock2)
graph.add_edge(edge)
graph.write('xmlSQL.png',prog = 'dot',format = 'png')
排名集羣問題的適當解決方案描述爲here。它涉及在某些邊緣上設置constraint = false
,以便dot
在對節點進行排名時將忽略它們。
在鏈接的文章中,該方法是啓發式描述的。在自動生成control flow graphs時爲我工作的方法是在後沿設置假constraint
。在CFG中,後向邊是從循環體的出口返回到入口的那些邊緣,所以如果您的應用程序涉及這些可識別的邊,那麼可以將其自動化,否則它仍可用作手動選擇邊的指導原則。
如果這些可識別的邊緣不是從有關問題的先驗結構信息中知道的,但是您仍然希望自動解除邊緣的約束,那麼您可以使用DFS或BFS樹(您的選擇)來選擇邊緣的子集作爲落後。