ヒントおよびトリック

レイアウトへの非表示ルートの追加

互いに非接続の複数のツリーがグラフに含まれている場合、レイアウトは、それらのツリーを隣同士に個別に配置します。 各接続コンポーネントは、環状レイヤーを持つ独自の放射構造を持ちます。 ただし、すべての接続コンポーネントを単一の環状レイヤー構造に入れるのが適切な場合もあります。 概念的には、これを行うには、中心に非表示のルートを追加して、すべての非接続ツリーをこのルートに接続します。 図 非表示ルートなしおよびありの接続コンポーネントのレイアウト に、非表示ルートの使用効果を示します。 これは、接続コンポーネントをレイアウトするための汎用メカニズムが使用不可になっている場合にのみ機能します。
非表示ルートをレイアウトに追加するには、以下のようにします。
以下のメソッドを呼び出します。
treeLayout.setLayoutOfConnectedComponentsEnabled(false);
treeLayout.setInvisibleRootUsed(true);

非接続グラフの汎用処理と、非表示ルートを使用する処理を対比したツリー・レイアウトの図
非表示ルートなしおよびありの接続コンポーネントのレイアウト

最初の円における等間隔

放射モードは、円の半径が小さく、レイアウト全体の総スペースが小さくなるように、スペースを最適化するように設計されています。 このような結果になるように、レイアウト・アルゴリズムは、外側の円のスペース使用効率を上げるために、内側の円のギャップを大きくすることがあります。 これにより、間隔が不均一な円が作成される可能性があります (これは、すべてのノードが同じ親ノードを持つ最初の円で顕著です)。
この影響を回避するために、最初の円全体で等間隔になるようにノードを強制できます。 グラフの構造によっては、これにより、レイアウト全体で他の円でのスペースの浪費が増大する可能性がありますが、 グラフがすっきりすることがあります。
等間隔を使用可能にするには、以下のようにします。
メソッド setFirstCircleEvenlySpacing を使用します。
treeLayout.setFirstCircleEvenlySpacing(true);

最初の円を等間隔にするパラメーターの使用例を示すツリー・レイアウトの図
等間隔および不等間隔の最初の円

上級者向け: すべてのレベルでの交互の強制

レイアウト・モード ALTERNATING_RADIAL を使用すると、 レイアウトは、1 つのレベルのノードを交互に配置することによってスペースが節約されるかどうかを検査します。 スペースが節約されない場合は、レイアウトは通常の放射配置を使用します。 そのため、データがまばらなグラフの多くでは、交互配置ではどのレベルでもスペースが節約されないため、 放射モードと交互放射モードで同じ結果になります。 スペース検査を使用不可にする (すなわち、スペースが浪費されることになる場合でもすべてのレベルで交互配置を実行する) ことも可能です。
メソッド setAllLevelsAlternating を使用します。
treeLayout.setAllLevelsAlternating(true);

上級者向け: 交互レベルごとに複数の円

レイアウト・モード ALTERNATING_RADIAL を使用すると、 レイアウトは、同じレベルのノードを、1 つの円ではなく 2 つの円に交互に配置します。 円の数をさらに増やすことが可能です。
メソッド setNumberOfAlternatingCircles を使用します。
treeLayout.setNumberOfAlternatingCircles(3);
この場合、3 つの円が使用されます。 すなわち、フラグ allLevelsAlternatingtrue の場合、 レイアウトは、各レベルのノードを 3 つの円に順に配置します。 allLevelsAlternating フラグが false の場合、 各レベルで、1 つの円または 3 つの円にノードを配置するためのスペースがより必要かどうかを検査します。 アルゴリズムの時間がかかり、またリンク交差が生じる可能性があるため、交互の円の数に大きな値を使用しないでください。
交互の円の数を 0 に設定し、 allLevelsAlternating フラグが false の場合は、 特殊な意味を持ちます。この場合、ヒューリスティックにより、レベルごとの円の最適数が自動的に計算されます。 結果として、ノード数およびノード間の兄弟関係に応じて、レベルごとに円の数が異なる可能性があります。

上級者向け: 子の最大角度の設定

ノードに多くの子ノードがある場合、子ノードは円の大部分に広がる可能性があるため、ノードを中心としてほぼ 360 度にわたって配置されます。 この結果、リンクが一部のノードにオーバーラップする可能性があります。 この欠陥は、親ノードと子ノード間のオフセットを大きくすることで修正可能です。 ただし、これはレイアウトにグローバルに影響するため、欠陥のないノードにも影響が出ます。 このようなグローバルな変更を回避するために、(親がルートではない場合に) 親から 2 つの最外部の子ノードへの 2 本の線の間の最大角度を制限することができます。 このアクションにより、必要な場合にのみ、親ノードと子ノード間のオフセットが大きくなります。
子の最大角度 の左のレイアウトで、リンクの多くが他のノードにオーバーラップしているのが確認できます。 右のレイアウトでは、親から 2 つの最外部の子ノードへの 2 本の線の間の、子の最大角度を設定することで、この問題がどのように解決されたのかが分かります。

子の最大角度パラメーターの使用例を示すツリー・レイアウトの図
子の最大角度
角度 (度数) を設定するには、以下のようにします。
メソッド setMaxChildrenAngle を使用します。
treeLayout.setMaxChildrenAngle(100);
推奨値は 30 から 180 までです。値を 0 に設定すると、角度は無制限になります。 180 度を超える場合、またはアスペクト比が 1.0 でない場合は、角度の計算は正確ではありません。