Search code examples
graphvizdotneato

gvpack (graphviz) not preserving labels of the individual digraphs


There are four dot files (cluster_0, cluster_1, cluster_2, cluster_3) which need to be merged into a single dot file.

The code of the individual dot files is as follows.

digraph cluster_0{
sortv=1;
penwidth=0;pencolor=transparent;
label="1A";
rankdir=LR;
 node [fontname = "times-roman-bold",fontsize=12];
        edge [fontname = "times-roman-bold",fontsize=12,arrowsize=0.75];
    1 [label="1:A"];
    2 [label="2:C"];
    3 [label="3:G"];
    3 -> 1
    1 -> 2
    3 -> 2
    2 -> 3
}
digraph cluster_1 {
sortv=2;
penwidth=0;pencolor=transparent;
 label="1B";
 node [fontname = "times-roman-bold",fontsize=12];
        edge [fontname = "times-roman-bold",fontsize=12,arrowsize=0.75];
    rankdir=LR;
    11 [label="1:A"];
    12 [label="2:C"];
    13 [label="3:G"];
    14 [label="4:T"];
    14 -> 11
    11 -> 12
    12 -> 13
    12 -> 14 
    13 -> 14
}
digraph cluster_2 {
    rankdir=LR;
  sortv=3;
penwidth=0;pencolor=transparent;
  label="1C";
 node [fontname = "times-roman-bold",fontsize=12];
        edge [fontname = "times-roman-bold",fontsize=12,arrowsize=0.75];
    21 [label="1:A"];
    22 [label="2:C"];
    23 [label="3:G"];
    24 [label="4:T"];
    25 [label="5:A"];
    24 -> 21
    21 -> 22
    21 -> 25
    25 -> 22
    22 -> 23
    23 -> 24
}
digraph cluster_3{
        sortv=4;
penwidth=0;pencolor=transparent;
        label="1D"
 node [fontname = "times-roman-bold",fontsize=12];
        edge [fontname = "times-roman-bold",fontsize=12,arrowsize=0.75];
    rankdir=LR;
    31 [label="1:A"];
    32 [label="2:C"];
    33 [label="3:G"];
    31:c -> 31:w
    32 -> 31 [dir=both,len=1.25];
    33 -> 31 [dir=both,];
    32 -> 32
    33 -> 32 [dir=both,];
    33 -> 33
}

To generate a merged single dot file ...I ran the following command.

neato -Gstart=5 cluster_0.dot cluster_1.dot cluster_2.dot cluster_3.dot | gvpack -array_u4 | neato -n2 -s -Teps -o merge.eps 

merge.eps came perfectly well but the labels of the individual graphs went missing. How can we preserve the labels of the individual graphs in the output merge file ? Can anyone help to fix this ?

Here I am attaching the single individual file where the label is shown I compiled the individual file with the following command.

neato -Gstart=5 cluster_0.dot -Teps -o cluster_0.eps

Also I am attaching the merge output file which removed the labels of the graphs.

enter image description here


Solution

  • This is not an answer but rather sharing experiences: As it turns out while experimenting with various options, it seems to be the neato engine that supresses the labels. If you use dot, you may not get the exact layout you want but you get the labels:

    dot -Gstart=5 cluster_0.dot cluster_1.dot cluster_2.dot cluster_3.dot | gvpack -array_u4 | dot -n2 -s -T jpg -o merge.jpg
    

    gives you

    enter image description here

    My personal preference would by to have one master file so.m4

    digraph so 
    {
        define(`digraph',`subgraph')
        rankdir=LR;
        include(cluster_0.dot)
        include(cluster_1.dot)
        include(cluster_2.dot)
        include(cluster_3.dot)
    }
    

    that I process with

    m4 so.m4 > so.dot
    

    In the resulting so.dot file, I have all clusters combined, and I can go to the next step (here producing a JPG) with a simple

    dot -T png -o so.png so.dot
    

    The advantage of that is that you can use the master file for "global options". I think it is easier to maintain and less unwieldy than the command with all the pipes and options. But that's a matter of taste.

    With the option rankdir=LR; this version is produced:

    enter image description here

    Have fun - happy to do more but I'd need to know more about your project.