Trying to recreate and create some relationship webs

A little background on me. I am a creative person. I write. I work with 3d models. I’m working on a Visual Novel.

I’m testing to see if I can use Graphviz to make relationship webs for my various works.

I am using the Graphviz visual editor website to set up the relationship webs, then I will use the programs to make the final graphs.

I’ve recreated the links in one web that I made in PowerPoint and created an expanded version of the same web that includes all characters not just the main ones.

I also have created a web for a setting that has 10 times the characters and 10 connections as the first one and I haven’t finished adding all the characters to it yet. I know it’s going to be huge when it’s done.

I have a third one that recreates a really screwed-up family tree to see if I can understand it better.

But none of them look very pretty, and one is so confusing that even I can’t understand it.

I’ve tried reading the documentation and can’t understand some of the concepts they mention.

So, any tips on how to make graphs in Graphviz more visually appealing and help organize the nodes better would be greatly appreciated.

They are all in dot layouts, but I am open to testing the other layouts if they are better.

Beauty is in the eye of the beholder. We will need to “behold” your progress to-date.

  • Have you looked at the examples (Gallery | Graphviz)? Are there any that look promising to you?
  • Are you willing to share your “not very pretty” input files? If not, would you be willing to use an “anonymizer” program to hide the specific names, etc?

Yes, the documentation is complex, but that we can help you with if you have questions.

I will gladly share the code if that helps.

Here is the first one.

[dot verbose=true scale=0.5]

graph G {
    layout=dot;
    compound=true;
    node [shape=circle, labelloc=b, fixedsize=true, width=1, penwidth=2]
    edge [penwidth=2]
//    rankdir="LR"
    
    Kaat [color = black]
    Thomas [color = black]
    Izumi [color = black]
    MaleMaran [label="Male \n Maran" color = black]
    Luna [color = black]
    Roxie [color = black]
    Mimi [color = black]
    Zuzako [color = black]
    Hibiki [color = black]
    Maran [color = black]
    Kate [color = black, group="KI"]
    No1 [shape=octagon, color = red style=filled,label="",height=.1,width=.1, group="KI"]
    Irena [color = black, group="KI"]
    Mizuki [color = black]
    No2 [shape=octagon, color = red style=filled,label="",height=.1,width=.1]
    No3 [shape=octagon, color = red style=filled,label="",height=.1,width=.1]

        subgraph JandJ_Crew {
            cluster=true;
            label="J&J Crew"
            subgraph KXT {
                label=""
                cluster=true;
                color = Pink
                {
                    cluster=false;
                    rank=same;Kaat;Thomas
                    
                }
                "Kaat"
                "Thomas"
            }
            {
                cluster=false;
                rank=same;Luna;Roxie;Mimi;Zuzako
            }
        "Luna"
        "Roxie"
        "Mimi"
        "Zuzako"
        }
        subgraph IXMM {
            label=""
            cluster=true;
            color = Pink
                {
                    cluster=false;
                    rank=same;Izumi;MaleMaran
                    
                }
            "Izumi"
            "MaleMaran"
        }
        subgraph KIM {
            cluster=true;
            label="K.I.M."
                {
                    cluster=false;
//                    rank=same;Kate;No1;Irena
                    
                }
            "Kate"
            "No1"
            "Irena"
            "Mizuki"
        }
        "No2"
        "No3"

    Kaat -- Thomas [color = Pink, minlen=10]
    Kaat -- Izumi [color = Pink]
    Izumi -- MaleMaran [color = Pink, minlen=10]
    Thomas -- MaleMaran [color = green]
    Kaat -- MaleMaran [color = yellow]
    Thomas -- Izumi [color = yellow]
    Thomas -- Izumi [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Izumi -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Luna -- Kaat [color = orange]
    Luna -- Thomas [color = orange]
    Roxie -- Kaat [color = orange]
    Roxie -- Thomas [color = orange]
    Roxie -- Luna [color = orange]
    Luna -- Izumi [color = yellow]
    Luna -- MaleMaran [color = yellow]
    Roxie -- Izumi [color = yellow]
    Roxie -- MaleMaran [color = yellow]
    Mimi -- Kaat [color = yellow]
    Mimi -- Thomas [color = yellow]
    Mimi -- Luna [color = yellow]
    Mimi -- Roxie [color = yellow]
    Mimi -- Izumi [color = yellow]
    Mimi -- MaleMaran [color = yellow]
    Mimi -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Mimi -- MaleMaran [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Hibiki -- Kaat [color = orange]
    Hibiki -- Thomas [color = orange]
    Hibiki -- Roxie [color = orange]
    Hibiki -- Luna [color = yellow]
    Hibiki -- Mimi [color = yellow]
    Hibiki -- Izumi [color = yellow]
    Hibiki -- MaleMaran [color = yellow]
    Maran -- MaleMaran [color = blue]
    Maran -- Izumi [color = yellow]
    Maran -- Izumi [color = red, lhead="IXMM", dir=forward, arrowhead=normal]
    Maran -- Kaat [color = yellow]
    Maran -- Thomas [color = yellow]
    Maran -- Roxie [color = yellow]
    Maran -- Luna [color = yellow]
    Maran -- Mimi [color = yellow]
    Maran -- Hibiki [color = yellow]
    Maran -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Luna -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Roxie -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Hibiki -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Zuzako -- Thomas [color = Pink, style=dashed, dir=forward, arrowhead=normal]
    Kate -- Kaat [color = blue]
    Irena -- Thomas [color = blue]
    Mizuki -- Luna [color = blue]
    Kate -- Thomas [color = yellow]
    Irena -- Kaat [color = yellow]
    Kate -- Thomas [color = red, lhead="KXT", dir=forward, arrowhead=normal]
    Irena -- Thomas [color = red, lhead="KXT", dir=forward, arrowhead=normal]
    Kate -- No1 [color = yellow, minlen=1]
    Irena -- No1 [color = yellow, minlen=1]
    Kaat -- No1 [color = red, dir=forward, arrowhead=normal]
    Thomas -- No1 [color = red, dir=forward, arrowhead=normal]
    Irena -- Mizuki [color = yellow]
    Kate -- Mizuki [color = yellow]
    Mizuki -- No2 [color = orange, style=dashed]
    No2 -- Thomas [color = orange, style=dashed, dir=forward, arrowhead=normal]
    Luna -- No2 [color = red, dir=forward, arrowhead=normal]
    Thomas -- No2 [color = red, dir=forward, arrowhead=normal]
    Mizuki -- No3 [color = orange, style=dashed]
    No3 -- MaleMaran [color = orange, style=dashed, dir=forward, arrowhead=normal]
    MaleMaran -- No3 [color = red, style=dashed, dir=forward, arrowhead=normal]
    Luna -- MaleMaran [color = orange, style=dashed, dir=forward, arrowhead=normal]
}

[/dot]
Here is an image of the original relationship web I made in PowerPoint for reference.

I figure what I learn from this one will help with the others.

I took the liberty to edit your post slightly in order for the graph to render inline in the forum.

Thank you.

I tried to do it myself and got an error in the preview.

I have a custom tool that backs onto GraphViz dot that might interest you.

Rough translation of your graph into my tool’s source: link

It’s yaml, but you can see the generated dot source in the second tab (about 93 kB).

Image support is rudimentary, but might get you what you want – I’ve included two examples in there; open another tab at https://azriel.im/dot_ix/ to play with other examples (top right drop down)

I’m checking it out now. I like some of the features.

The markup is very different from the Graphviz markup. I have to look to Yami to understand it better.

Do you have any documentation?

I haven’t got good documentation, but the top level structure is this: InfoGraph. The examples are the best support there is for learning; ThemeAttr may also be useful to you.

I picked YAML as the format to take in values because I wanted something that:

  • allows relatively okay text-based editing (easy to type the diagram definition)

  • any programming language has some support for

  • isn’t too hard to read

  • has some sort of deduplication mechanism (the &anchor, *anchor, and <<: bits).

    Quirk with the implementation I’m using is it can only have one <<:, and when using it, all the other values in that object need to be wrapped in single quotes ('100' instead of 100)

It does feel a bit weird if you haven’t used indentation-means-different-field-level semantics before.