Subgraphs laid out by quandrant around a main idea?

Hi all - I’m hoping to emulate a brainstorming layout (mindmap/diagram) by flowing the subgraphs around a main idea. Is there a layout + attribute combination in graphviz that would allow me to position the four subgraphs in this example (dot layout engine) around the main idea instead of all clustered below? Ideally, the four subgraphs would be postioned in four quandrants around the main idea, with two being above, and two being below.

So I’d like to go from this…

…to something like this:

Is this a one-time thing or do you want a solution that will work well with many varying inputs?

Thanks…the idea is to have it repeatable for varying inputs, so not a one-off. I have the fdp engine to help with the spread, though I prefer the dot representation of the data, again just not by putting every subgraph underneath the main idea per the original post.

FDP output is below:

This uses (invisible - peripheries=0) clusters and a few invisible edges.
Pretty repeatable & better(?) that expected.
But if you have more than 4 subgraphs, I suggest a major re-think.

digraph {
  peripheries=0
    subgraph clustergroup_000 {
      "main_idea_title" [width=5.555555555555555, height=1.0416666666666665, shape=rectangle, label="MAIN IDEA", style="filled", fillcolor="#baee7b"]
      "main_idea_text" [width=3.472222222222222, height=3.472222222222222, shape=rectangle, label="MAIN DESCRIPTION", style="filled", fillcolor="#baee7b"]
      "main_idea_title" -> "main_idea_text" [style=invis]
    }

  subgraph clusterwrap0 {
    subgraph clustergroup_0 {
        "sub_idea_0_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
        "sub_idea_0_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
        "sub_idea_0.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
        "sub_idea_0.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
        "sub_idea_0.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
        "sub_idea_0.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
        "sub_idea_0.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
        "sub_idea_0.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
        "sub_idea_0.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
        "sub_idea_0.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
        "sub_idea_0.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
        "sub_idea_0.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
        "sub_idea_0.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
        "sub_idea_0.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
        "sub_idea_0_title" -> "sub_idea_0_text" [penwidth=5]
        "sub_idea_0_title" -> "sub_idea_0.0_title" [penwidth=5]
        "sub_idea_0_title" -> "sub_idea_0.1_title" [penwidth=5]
        "sub_idea_0.0_title" -> "sub_idea_0.0_text" [penwidth=5]
        "sub_idea_0.0_title" -> "sub_idea_0.0.0_title" [penwidth=5]
        "sub_idea_0.0_title" -> "sub_idea_0.0.1_title" [penwidth=5]
        "sub_idea_0.0.0_title" -> "sub_idea_0.0.0_text" [penwidth=5]
        "sub_idea_0.0.1_title" -> "sub_idea_0.0.1_text" [penwidth=5]
        "sub_idea_0.1_title" -> "sub_idea_0.1_text" [penwidth=5]
        "sub_idea_0.1_title" -> "sub_idea_0.1.0_title" [penwidth=5]
        "sub_idea_0.1_title" -> "sub_idea_0.1.1_title" [penwidth=5]
        "sub_idea_0.1.0_title" -> "sub_idea_0.1.0_text" [penwidth=5]
        "sub_idea_0.1.1_title" -> "sub_idea_0.1.1_text" [penwidth=5]
    }
    subgraph clustergroup_1 {
        "sub_idea_1_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
        "sub_idea_1_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
        "sub_idea_1.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
        "sub_idea_1.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
        "sub_idea_1.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
        "sub_idea_1.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
        "sub_idea_1.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bc6ee"]
        "sub_idea_1.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bc6ee"]
        "sub_idea_1.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#817bee"]
        "sub_idea_1.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#817bee"]
        "sub_idea_1.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#987bee"]
        "sub_idea_1.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#987bee"]
        "sub_idea_1.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#c67bee"]
        "sub_idea_1.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#c67bee"]
        "sub_idea_1_title" -> "sub_idea_1_text" [penwidth=5]
        "sub_idea_1_title" -> "sub_idea_1.0_title" [penwidth=5]
        "sub_idea_1_title" -> "sub_idea_1.1_title" [penwidth=5]
        "sub_idea_1.0_title" -> "sub_idea_1.0_text" [penwidth=5]
        "sub_idea_1.0_title" -> "sub_idea_1.0.0_title" [penwidth=5]
        "sub_idea_1.0_title" -> "sub_idea_1.0.1_title" [penwidth=5]
        "sub_idea_1.0.0_title" -> "sub_idea_1.0.0_text" [penwidth=5]
        "sub_idea_1.0.1_title" -> "sub_idea_1.0.1_text" [penwidth=5]
        "sub_idea_1.1_title" -> "sub_idea_1.1_text" [penwidth=5]
        "sub_idea_1.1_title" -> "sub_idea_1.1.0_title" [penwidth=5]
        "sub_idea_1.1_title" -> "sub_idea_1.1.1_title" [penwidth=5]
        "sub_idea_1.1.0_title" -> "sub_idea_1.1.0_text" [penwidth=5]
        "sub_idea_1.1.1_title" -> "sub_idea_1.1.1_text" [penwidth=5]
    }
    }


  subgraph clusterwrap1 {
    subgraph clustergroup_2 {
        "sub_idea_2_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#dd7bee"]
        "sub_idea_2_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#dd7bee"]
        "sub_idea_2.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#ee7baf"]
        "sub_idea_2.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#ee7baf"]
        "sub_idea_2.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b98"]
        "sub_idea_2.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b98"]
        "sub_idea_2.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#baee7b"]
        "sub_idea_2.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#baee7b"]
        "sub_idea_2.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
        "sub_idea_2.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
        "sub_idea_2.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
        "sub_idea_2.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
        "sub_idea_2.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
        "sub_idea_2_title" -> "sub_idea_2_text" [penwidth=5]
        "sub_idea_2_title" -> "sub_idea_2.0_title" [penwidth=5]
        "sub_idea_2_title" -> "sub_idea_2.1_title" [penwidth=5]
        "sub_idea_2.0_title" -> "sub_idea_2.0_text" [penwidth=5]
        "sub_idea_2.0_title" -> "sub_idea_2.0.0_title" [penwidth=5]
        "sub_idea_2.0_title" -> "sub_idea_2.0.1_title" [penwidth=5]
        "sub_idea_2.0.0_title" -> "sub_idea_2.0.0_text" [penwidth=5]
        "sub_idea_2.0.1_title" -> "sub_idea_2.0.1_text" [penwidth=5]
        "sub_idea_2.1_title" -> "sub_idea_2.1_text" [penwidth=5]
        "sub_idea_2.1_title" -> "sub_idea_2.1.0_title" [penwidth=5]
        "sub_idea_2.1_title" -> "sub_idea_2.1.1_title" [penwidth=5]
        "sub_idea_2.1.0_title" -> "sub_idea_2.1.0_text" [penwidth=5]
        "sub_idea_2.1.1_title" -> "sub_idea_2.1.1_text" [penwidth=5]
    }
    subgraph clustergroup_3 {
        "sub_idea_2.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
        "sub_idea_3_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
        "sub_idea_3_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
        "sub_idea_3.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
        "sub_idea_3.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
        "sub_idea_3.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
        "sub_idea_3.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
        "sub_idea_3.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
        "sub_idea_3.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
        "sub_idea_3.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
        "sub_idea_3.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
        "sub_idea_3.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
        "sub_idea_3.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
        "sub_idea_3.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
        "sub_idea_3.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
        "sub_idea_3_title" -> "sub_idea_3_text" [penwidth=5]
        "sub_idea_3_title" -> "sub_idea_3.0_title" [penwidth=5]
        "sub_idea_3_title" -> "sub_idea_3.1_title" [penwidth=5]
        "sub_idea_3.0_title" -> "sub_idea_3.0_text" [penwidth=5]
        "sub_idea_3.0_title" -> "sub_idea_3.0.0_title" [penwidth=5]
        "sub_idea_3.0_title" -> "sub_idea_3.0.1_title" [penwidth=5]
        "sub_idea_3.0.0_title" -> "sub_idea_3.0.0_text" [penwidth=5]
        "sub_idea_3.0.1_title" -> "sub_idea_3.0.1_text" [penwidth=5]
        "sub_idea_3.1_title" -> "sub_idea_3.1_text" [penwidth=5]
        "sub_idea_3.1_title" -> "sub_idea_3.1.0_title" [penwidth=5]
        "sub_idea_3.1_title" -> "sub_idea_3.1.1_title" [penwidth=5]
        "sub_idea_3.1.0_title" -> "sub_idea_3.1.0_text" [penwidth=5]
        "sub_idea_3.1.1_title" -> "sub_idea_3.1.1_text" [penwidth=5] 
    }
  }
// 0 and 1 are now over/under
// 2 and 3 are also over & under
    "sub_idea_0_title" -> "main_idea_title"  [penwidth=5]
    "sub_idea_2_title" -> "main_idea_title"  [penwidth=5]

   // minlen is not specific to these graphs, should work for most inputs
   "sub_idea_0_title" ->  "sub_idea_1_title"  [minlen=8 style=invis]
   "sub_idea_2_title" ->  "sub_idea_3_title"  [minlen=8 style=invis] 

    "main_idea_title" -> "sub_idea_1_title" [penwidth=5]
    "main_idea_title" -> "sub_idea_3_title" [penwidth=5]
// next two lines are optional
//    "main_idea_text" -> "sub_idea_1_title" [style=invis]
//    "main_idea_text" -> "sub_idea_3_title" [style=invis]
}

Giving:

1 Like

OH this is truly great. Thank you so much!!

I found something similar to what you want in the graphviz gallery: the mind map of happiness.

pic

1 Like