web-dev-qa-db-ja.com

GraphViz-メイングラフが上から下の場合にサブグラフを左から右にする方法は?

私はこのようなグラフファイルを持っています:

digraph {
    "Step1" -> "Step2" -> "Step3";

    subgraph step2detail {
        "Step2" -> "note1";
        "Step2" -> "note2";
        "Step2" -> "note3";
        "Step2" -> "note4";
        rankdir=TB
   }
}

サブグラフstep2detailを「Step2」の右側にぶら下げたい。

現在、次のようになっています。

enter image description here

Step1、Step2、Step3をすべて垂直に並べて1列にします。

24
Rory

説明したグラフを取得する秘訣は、2つのサブグラフを使用して、一方から他方にリンクすることです。 「詳細」の目に見えないエッジは、ノートを整列させ続けるものです。

digraph {
    rankdir="LR";

    subgraph steps {
        rank="same";
        "Step1" -> "Step2" -> "Step3";
    }

    subgraph details {
        rank="same";
        Edge[style="invisible",dir="none"];
        "note1" -> "note2" -> "note3" -> "note4";
    }

    "Step2" -> "note1";
    "Step2" -> "note2";
    "Step2" -> "note3";
    "Step2" -> "note4";
}

結果は次のとおりです。

enter image description here

11
irgeek

ステップノードをクラスター化されたサブグラフにグループ化すると、出力は次のようになります。

digraph {
    subgraph cluster_0 {
        color=invis;
        "Step1" -> "Step2" -> "Step3";
    }

    subgraph cluster_1 {
        color=invis;
        "Step2" -> "note4";
        "Step2" -> "note3";
        "Step2" -> "note2";
        "Step2" -> "note1";
   }
}

color=invisクラスターの周囲に描画される境界線を削除します

7
Photodeus

これは簡単です。group属性を使用して、graphvizに直定規を優先させます。

digraph {
    node[group=a, fontname="Arial", fontsize=14];
    "Step1" -> "Step2" -> "Step3";

    node[group=""];
    "Step2" -> "note1";
    "Step2" -> "note2";
    "Step2" -> "note3";
    "Step2" -> "note4";
}

graphviz output

7
marapet

ランクディールはサブグラフで直接機能しませんが、中括弧の別のセットを追加すると(それが何と呼ばれていても)、ランクディールは機能します。

digraph {
    "Step1" -> "Step2" -> "Step3";

    subgraph step2detail {
        {
            "Step2" -> "note1";
            "Step2" -> "note2";
            "Step2" -> "note3";
            "Step2" -> "note4";
            rankdir=TB
            rank=same
        }
   }
}

enter image description here

0
Jason Kleban