質問

DOTためGraphViz言語では、私は、依存関係図を表現するためにしようとしています。私は、コンテナ内のノードを持っているし、他のノードおよび/またはコンテナに依存ノードおよび/またはコンテナを作ることができるようにできるようにする必要があります。

私は自分のコンテナを表すためにsubgraphを使用しています。ノードのリンクがうまく動作しますが、私はサブグラフを接続する方法を見つけ出すことはできません。

以下のプログラムを考えると、私は矢印でcluster_1cluster_2を接続できるようにする必要がありますが、私が試したものは、クラスタを接続するのではなく、新しいノードを作成します:

digraph G {

    graph [fontsize=10 fontname="Verdana"];
    node [shape=record fontsize=10 fontname="Verdana"];

    subgraph cluster_0 {
        node [style=filled];
        "Item 1" "Item 2";
        label = "Container A";
        color=blue;
    }

    subgraph cluster_1 {
        node [style=filled];
        "Item 3" "Item 4";
        label = "Container B";
        color=blue;
    }

    subgraph cluster_2 {
        node [style=filled];
        "Item 5" "Item 6";
        label = "Container C";
        color=blue;
    }

    // Renders fine
    "Item 1" -> "Item 2";
    "Item 2" -> "Item 3";

    // Both of these create new nodes
    cluster_1 -> cluster_2;
    "Container A" -> "Container C";
}

ここに画像の説明を入力します

役に立ちましたか?

解決

DOTのユーザマニュアルは、クラスタ間のエッジを有するクラスタとグラフの次の例を示し

digraph G {
  compound=true;
  subgraph cluster0 {
    a -> b;
    a -> c;
    b -> d;
    c -> d;
  }
  subgraph cluster1 {
    e -> g;
    e -> f;
  }
  b -> f [lhead=cluster1];
  d -> e;
  c -> g [ltail=cluster0,lhead=cluster1];
  c -> e [ltail=cluster0];
  d -> h;
}

ノードとクラスタ間のエッジ。

ここに画像の説明を入力します

他のヒント

参照を容易にするためにHighPerformanceMarkの答えに記載された解決策は、元の質問に直接適用され、次のようになります:

digraph G {

    graph [fontsize=10 fontname="Verdana" compound=true];
    node [shape=record fontsize=10 fontname="Verdana"];

    subgraph cluster_0 {
        node [style=filled];
        "Item 1" "Item 2";
        label = "Container A";
        color=blue;
    }

    subgraph cluster_1 {
        node [style=filled];
        "Item 3" "Item 4";
        label = "Container B";
        color=blue;
    }

    subgraph cluster_2 {
        node [style=filled];
        "Item 5" "Item 6";
        label = "Container C";
        color=blue;
    }

    // Edges between nodes render fine
    "Item 1" -> "Item 2";
    "Item 2" -> "Item 3";

    // Edges that directly connect one cluster to another
    "Item 1" -> "Item 3" [ltail=cluster_0 lhead=cluster_1];
    "Item 1" -> "Item 5" [ltail=cluster_0 lhead=cluster_2];
}

compound=true宣言のgraphが不可欠です。つまり、出力を生成します:

接続されたクラスタとのグラフ

Iクラスタ名を指定し、ltailとlhead各エッジに属性を追加し、クラスタ内のノードを参照するためにエッジを変更し、グラフ・レベル属性の化合物=真」を追加した。

1は、内部にいないノードでクラスタを接続したい場合があります心配に関しては、私の解決策は、の常にスタイル=平文でレンダリングすべてのクラスタにノードを追加してきました。代わりに、Pythonの、label='""'に(空の文字列に設定する必要があり、クラスタの組み込みの「ラベル」属性)。これは私が直接クラスタを接続するエッジを追加することなくなってる意味ないの(クラスタにラベルを付けるために、このノードを使用しますが、それは私の特定の状況で動作します。

あなたはファイルのfdpレイアウトを使用していることを確認してください。私はneatoはクラスタをサポートしないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top