10

A4 ページに収まる必要がある次の最小限のグラフの例を考えてみましょう

digraph G{
size="8.3,11.7!" ratio=fill;
foo->bar;
}

Compile withneato -Tpdf -o min_ex.pdf min_ex.gv 結果の pdf ファイルの寸法は 236mm x 115mm で、意図した 210mm x 297mm ではありません。

Graphviz は、(このような) ページより小さいグラフと、収まるように縮小する必要があるグラフの両方で、この属性を無視します。

size属性と属性の組み合わせを試しratioましたが、グラフを A4 ページに配置することはできません。

では、サイズに関係なく、グラフが常に A4 ページに配置されるように指定するにはどうすればよいでしょうか?

ドキュメンテーション:

サイズ:

図面の最大幅と高さ (インチ単位)。数値が 1 つしか指定されていない場合、これは幅と高さの両方に使用されます。

定義されていて、図面が指定されたサイズよりも大きい場合、図面は指定されたサイズに収まるように均一に縮小されます。

サイズが感嘆符 (!) で終わる場合、それが目的のサイズであると見なされます。この場合、図面の両方の寸法がサイズよりも小さい場合、図面は、少なくとも 1 つの寸法のサイズがその寸法と等しくなるまで均一に拡大されます。

図面の縦横比 (図面の高さ/図面の幅) を設定します。これは、サイズ属性の制約が適用される前に調整されることに注意してください。さらに、計算では通常、ノードのサイズが無視されるため、最終的な描画サイズは必要なサイズに近似するだけになる場合があります。

ratio が数値の場合、目的の縦横比と見なされます。次に、実際の縦横比が目的の比率よりも小さい場合、図面の高さを拡大して目的の比率を達成します。実際の比率が目的の比率よりも大きい場合、描画幅は拡大されます。

ratio = "fill" で size 属性が設定されている場合、ノードの位置は x と y の両方で個別にスケーリングされるため、最終的な描画は指定されたサイズで正確に塗りつぶされます。両方のサイズ値が図面の幅と高さを超える場合、各ノードの両方の座標値がそれに応じて拡大されます。ただし、いずれかのサイズ寸法が図面内の対応する寸法よりも小さい場合は、最終図面がサイズで指定された縦横比と同じになるように、1 つの寸法が拡大されます。次に、レンダリングされると、レイアウトは指定されたサイズに収まるように両方の次元で均一に縮小されます。これにより、ノードとテキストも縮小される場合があります。これはユーザーが望んでいるものではないかもしれませんが、ノードを適切な方法で再配置して描画サイズを縮小する方法という難しい問題を回避できます。

ratio = "compress" で size 属性が設定されている場合、dot は指定されたサイズに収まるように初期レイアウトを圧縮しようとします。これにより、ノードがより密にパッキングされますが、バランスと対称性が低下します。この機能はドットでのみ機能します。

ratio = "expand" の場合、size 属性が設定され、グラフの幅と高さの両方が size の値よりも小さく、少なくとも 1 つのディメンションがサイズに正確に収まるまで、ノードの位置が均一にスケーリングされます。これは、目的のサイズとして size を使用することとは異なることに注意してください。ここでは、エッジが生成される前に描画が拡大され、すべてのノードとテキストのサイズは変更されません。

ratio = "auto" の場合、ページ属性が設定され、グラフを 1 ページに描画できない場合、サイズは「理想的な」値に設定されます。特に、特定の次元のサイズは、現在のサイズの少なくとも半分である、その次元のページ サイズの最小の整数倍になります。2 つのディメンションは、新しいサイズに個別にスケーリングされます。この機能はドットでのみ機能します。

4

1 に答える 1

11

問題は、比率に関する詳細にあります。

これは、サイズ属性の制約が適用される前に調整されることに注意してください。さらに、通常、計算ではノード サイズが無視されるため、最終的な描画サイズは、必要なサイズに近似するだけになる場合があります。

グラフビズらしい

  • ノードをポイントとしてレイアウトします(サイズは無視します) 。
  • ポイントノードの比率を調整します(ノードのサイズはまだありません)
  • グラフのサイズ制約を適用します (この場合は、画像をアップスケーリングします):ここでは、既に目的のサイズに達していますが、まだ終了していません...
  • 次に、ポイント ノードは実際のサイズのノードになります (デフォルトでは、高さ 0.5 インチ、幅 0.75 インチ)。
  • そして最後に、出力全体にマージンが追加されます

結果はA4よりも大きくなります。

したがって、ノードとマージンをできるだけ小さくすると、出力は A4 に比較的近くなるはずです。

次のグラフを使用して、0 に設定し、ノードを最小値に設定しmarginますshapepointwidthheight

digraph G{
 ratio="fill";
 size="8.3,11.7!";
 margin=0;

 node[shape=point, height=0.02, width=0.01];
 foo->bar;
}

neato -Tpdfこのグラフを使用すると、寸法が 211x297mm の PDF になります (幅として 8.267 インチを使用すると、きれいな 210x297mm になります)。


残念ながら、graphviz が に関してどのように機能するかを知ってratio=fillいても、実際に幅と高さを持つノードを使用するときに最終結果が常に A4 であることを確認する簡単な方法はないと思います。

于 2013-12-10T21:56:00.517 に答える