1

私はgraphvizとDOT言語の初心者です。クラスターサブグラフを使用してグラフを生成しようとしていました。ただし、クラスターがあり、それぞれがスクリプトで正確に指定されたノード位置を持つ場合、graphviz はクラスターのアウトライン ボックスまたはラベルを生成しません! 具体的には、次の DOT スクリプトがあるとします。

digraph G{
subgraph cluster0{
label="Cluster 0"
a->b
}
subgraph cluster1{
label="Cluster 1"
c->d
}
}

生成されるグラフは次のとおりです。 ノード位置がユーザーによって指定されていない場合にクラスターで生成されたグラフ

ただし、次の DOT スクリプトでは、4 つのノードのノード位置を正確に指定します。

digraph G{
subgraph cluster0{
label = "Cluster 0"
a[pos="10,200"]
b[pos="100,200"]
a->b
}
subgraph cluster1{
label = "Cluster 1"
c[pos="10,100"]
d[pos="100,100"]
c->d
}
}

生成されるグラフは次のとおりです。 ノード位置がユーザーによって指定されたときにクラスターで生成されたグラフ

この場合、クラスターのアウトラインボックスもクラスターのラベルも印刷されないことに注意してください!! この場合、ご覧のとおり、2 つのクラスター間に明確な境界があります。クラスターは重複していないため、原則として、graphviz でそれらを表示する際に問題は発生しないはずです。

何があっても、グラフビズにクラスターのアウトラインボックスとラベルを描画するように指示するにはどうすればよいですか? これでどんな助けでも大歓迎です!!

ありがとう!

4

2 に答える 2

1

The dot layout engine doesn't support the pos attribute.

To render a graph with positions of all nodes predefined, you should use neato or fdp with the -n option.

neato doesn't support clusters (though it seems it should now). Fortunately, fdpdoes!

Therefore, you may use the following command:

dot -Tpdf -Kpdf -n -O filename.dot

or

fdp -Tpdf -n -O filename.dot

Unfortunately, the positions of the nodes relative to the cluster are ok, but clusters still seem to get moved by fdp (-n switch didn't make a difference).

I didn't try with the latest version (I used 2.29.20120504), but if the latest doesn't work neither, this may be a case for a bug report.

Btw, since positions are assumed to be in inches, this will create a very large graph.


Output I get with fdp (with or without -n switch) - I added size=20 to limit the image size:

fdp output


Alternative solution without using pos:

digraph G{
subgraph cluster0{
label = "Cluster 0"
{rank=same; a->b;}
}
subgraph cluster1{
label = "Cluster 1"
{rank=same; c->d; }
}

a -> c [style=invis];
}
于 2012-10-02T23:25:07.097 に答える