GraphViz - How to have a subgraph be left-to-right when main graph is top-to-bottom?

前端 未结 5 1931
梦毁少年i
梦毁少年i 2021-02-01 16:31

I have a graph file like this:

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

    subgraph step2detail {
        \"Step2\" -> \"note1\";
        \"         


        
相关标签:
5条回答
  • 2021-02-01 17:00

    Use the command: rankdir=LR;

    digraph {
    rankdir=LR;
    
        "Step1" -> "Step2" -> "Step3";
    
        subgraph step2detail {
            "Step2" -> "note1";
            "Step2" -> "note2";
            "Step2" -> "note3";
            "Step2" -> "note4";
            rankdir=TB
       }
    
    }
    
    0 讨论(0)
  • 2021-02-01 17:03

    rankdir doesn't work directly in the subgraph, but if you add another set of curly braces - whatever that's called - rankdir works:

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

    0 讨论(0)
  • 2021-02-01 17:06

    Here's as simple as it gets - just use the group attribute to have graphviz prefer straight edges:

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

    graphviz output

    0 讨论(0)
  • 2021-02-01 17:08

    By grouping the Step nodes into a clustered subgraph, the output is as follows:

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

    color=invis removes the border that would otherwise be drawn around the cluster

    0 讨论(0)
  • 2021-02-01 17:11

    The trick to get the graph you described is to use two subgraphs and link from one to the other. The invisible edges in "details" are what keep the notes aligned.

    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";
    }
    

    The result is:

    0 讨论(0)
提交回复
热议问题