1

他のクラスターの階層を含む 2 つのクラスターがある場合。すべてとてもクールです!

2 つのクラスターを垂直に配置したいと考えています。他の投稿では、ノード (クラスターではない) を垂直に配置する方法が提案されていますが、これをクラスターで機能させることができません。

size パラメーターは私には機能しませんが、私の python プログラムは一般的に任意のサイズのグラフのクラスを設定するため、これは間違った答えのようです。2 つのクラスターをもう一方の上に置きたいだけで、サイズは何でも構いません。

簡単な例をいただければ幸いです。

4

2 に答える 2

1

問題を解決しました。それぞれがサブクラスターの階層を含み、長方形として描かれている 2 つの独立したクラスターがあります。2 つのクラスターをグラフに追加すると、左から右に表示されますが、一方を他方の上に重ねたいと思います。各クラスターにノードを追加すると、それらを垂直方向に取得できます。スタイル修飾子で非表示にできますが、ノードをラベルとして使用しました。2 つのノード間にエッジを追加することにより、2 つのクラスターは、エッジの長さを最小限に抑えるために最も適切な方法で方向付けられ、垂直方向に再配置されます。

以下の例では、ノードを cluster1 に追加し、もう 1 つのノードを cluster2 に追加することができるため、必要ではないかもしれない 2 つの囲みブロックをさらに作成しますが、囲みブロックがダイアグラムをよりきれいにすることがわかりました。

たとえば、

#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')
于 2012-06-12T04:54:30.603 に答える
0

クラスターのランク付けの問題に対する適切な解決策については、こちらで説明しています。ノードをランク​​付けするときにそれらを無視するconstraint = falseように、特定のエッジを設定する必要があります。dot

リンクされた投稿では、アプローチがヒューリスティックに説明されています。制御フロー グラフを自動的に生成するときにうまくいった方法はconstraint、後方エッジに false を設定することです。

制御フロー グラフでは、後方エッジは、ループ本体の出口からその入口に戻るエッジです。そのため、アプリケーションにそのような識別可能なエッジが含まれる場合は、それを自動化できます。そうでない場合は、エッジを手動で選択するための指針として引き続き使用できます。

そのような識別可能なエッジが問題に関する先験的な構造情報からは知られていないが、それでもエッジの制約解除を自動化したい場合は、深さ優先ツリーまたは幅優先ツリー (任意) を使用してエッジのサブセットを選択できます。後方として。

于 2014-09-10T06:33:50.720 に答える