私は、さまざまなサイズの多くの独立した単純なdigraph
で構成されるsubgraphs
を持っています。 dot
はこれらすべてのサブグラフを水平に配置するため、最終的に40000x200の出力ファイルになります。例:
G1 G2 G3 G.....4 G5
dot
に、これらのサブグラフを両方の次元でレイアウトして、次のようにする方法を教えてください。
G1 G2 G3
G.....4
G5
ありがとう。
これを実現するための手順では、複数のgraphvizツールを使用します。これは一緒にパイプ処理できます。
次の行は可能な構成です。graph.dotは、グラフを含むファイルです。あなたはオプションをいじる必要があるかもしれません。
ccomps -x graph.dot | dot | gvpack -array3 | neato -Tpng -n2 -o graph.png
そしてここに説明があります:
ツール:ccomps
グラフを連結成分に分解します
-x
オプション(個別のグラフ)として、接続されたコンポーネントのみが印刷されます。
ツール:ドット
各有向グラフは1つずつレイアウトされます。このステップは、ノードとエッジの位置を取得するために必要です。
ツール:gvpack
グラフのストリームを読み取り、グラフを1つのレイアウトに結合し、入力グラフの和集合として機能する1つのグラフを生成します。
このツールのオプションのドキュメントを読んで、オプションを試してみてください。例えば、 -array
は、グラフをグリッドのようにレイアウトするために使用され、レイアウトを制御するためのいくつかのフラグを提供します。
ツール:neato
オプション -n2
は、入力グラフをレイアウトするのではなく、既存の位置属性を使用するようにneatoに指示します。
グラフの例:
digraph G {
subgraph G1 {
a->{b; c;};
}
subgraph G2 {
d -> {e; f;};
}
subgraph G3 {
g -> h;
}
subgraph G4 {
i -> j;
}
subgraph G5 {
{k; l;} -> m;
}
}
編集: gvpackの有向グラフの並べ替え
出現順序を決定するためにod gvpack
によって作成された結合レイアウトのサブグラフ、各サブグラフにはsortv
属性が必要です。
たとえば、次のグラフ:
digraph G1 {
sortv=1;
a->{b; c;};
}
digraph G2 {
sortv=2;
d -> {e; f;};
}
digraph G3 {
sortv=3;
g -> h;
}
digraph G4 {
sortv=4;
i -> j;
}
digraph G5 {
sortv=5;
{k; l;} -> m;
}
を使用して変換できます
dot graph.dot | gvpack -array_u | neato -Tpng -n2 -o graph.png
その結果