Search code examples
graphviz

GraphViz not respecting rankdir


So I was writing some graphviz code to produce the subgroup lattice of an order 48 group with a total of 98 subgroups (counting trivial group and entire group). So I used invisible nodes to rank them by the subgroup's order as I have done for smaller examples in the past, but this time something odd happens, it is ranking the order 4 and order 8 subgroups on the same row, and likewise the order 6 and order 12 subgroups, this despite explicitly connected all the relevant order with directed edges and having set rankdir at the beginning. GraphViz code:

digraph G{
rankdir = "BT" ;
node [shape=plaintext] Order1 -> Order2 -> Order3 -> Order4 -> Order6 -> Order8 -> Order12 -> Order16 -> Order24 -> Order48 [style=invis];
{rank = same Order1; Subgroup1}
{rank = same Order2; Subgroup2 ; Subgroup3 ; Subgroup4 ; Subgroup5 ;     Subgroup6 ; Subgroup7 ; Subgroup8 ; Subgroup9 ; Subgroup10 ; Subgroup11 ; Subgroup12 ; Subgroup13 ; Subgroup14 ; Subgroup15 ; Subgroup16 ; Subgroup17 ; Subgroup18 ; Subgroup19 ; Subgroup20}
{rank = same Order3; Subgroup21 ; Subgroup22 ; Subgroup23 ; Subgroup24}
{rank = same Order4; Subgroup25 ; Subgroup26 ; Subgroup27 ; Subgroup28 ; Subgroup29 ; Subgroup30 ; Subgroup31 ; Subgroup32 ; Subgroup33 ; Subgroup34 ; Subgroup35 ; Subgroup36 ; Subgroup37 ; Subgroup38 ; Subgroup39 ; Subgroup40 ; Subgroup41 ; Subgroup42 ; Subgroup43 ; Subgroup44 ; Subgroup45 ; Subgroup46 ; Subgroup47 ; Subgroup48 ; Subgroup49 ; Subgroup50 ; Subgroup51 ; Subgroup52 ; Subgroup53 ; Subgroup54 ; Subgroup55}
{rank = same Order6; Subgroup56 ; Subgroup57 ; Subgroup58 ; Subgroup59 ; Subgroup60 ; Subgroup61 ; Subgroup62 ; Subgroup63 ; Subgroup64 ; Subgroup65 ; Subgroup66 ; Subgroup67}
{rank = same Order8; Subgroup68 ; Subgroup29 ; Subgroup70 ; Subgroup71 ; Subgroup72 ; Subgroup73 ; Subgroup74 ; Subgroup75 ; Subgroup76 ; Subgroup77 ; Subgroup78 ; Subgroup79 ; Subgroup80 ; Subgroup81 ; Subgroup82 ; Subgroup83 ; Subgroup84 ; Subgroup85 ; Subgroup86}
{rank = same Order12; Subgroup87 ; Subgroup88 ; Subgroup89 ; Subgroup90 ; Subgroup91}
{rank = same Order16; Subgroup92 ; Subgroup93 ; Subgroup94}
{rank = same Order24; Subgroup95 ; Subgroup96 ; Subgroup97}
{rank = same Order48; Subgroup98}
Order1[label=""];
Order2[label=""];
Order3[label=""];
Order4[label=""];
Order6[label=""];
Order8[label=""];
Order12[label=""];
Order16[label=""];
Order24[label=""];
Order48[label=""];
Subgroup1[shape=ellipse, peripheries=1, label="(1,1)"];
Subgroup2[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup3[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup4[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup5[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup6[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup7[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup8[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup9[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup10[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup11[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup12[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup13[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup14[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup15[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup16[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup17[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup18[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup19[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup20[shape=ellipse, peripheries=1, label="(2,1)"];
Subgroup21[shape=ellipse, peripheries=1, label="(3,1)"];
Subgroup22[shape=ellipse, peripheries=1, label="(3,1)"];
Subgroup23[shape=ellipse, peripheries=1, label="(3,1)"];
Subgroup24[shape=ellipse, peripheries=1, label="(3,1)"];
Subgroup25[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup26[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup27[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup28[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup29[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup30[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup31[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup32[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup33[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup34[shape=ellipse, peripheries=1, label="(4,1)"];
Subgroup35[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup36[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup37[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup38[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup39[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup40[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup41[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup42[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup43[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup44[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup45[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup46[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup47[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup48[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup49[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup50[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup51[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup52[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup53[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup54[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup55[shape=ellipse, peripheries=1, label="(4,2)"];
Subgroup56[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup57[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup58[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup59[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup60[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup61[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup62[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup63[shape=ellipse, peripheries=1, label="(6,1)"];
Subgroup64[shape=ellipse, peripheries=1, label="(6,2)"];
Subgroup65[shape=ellipse, peripheries=1, label="(6,2)"];
Subgroup66[shape=ellipse, peripheries=1, label="(6,2)"];
Subgroup67[shape=ellipse, peripheries=1, label="(6,2)"];
Subgroup68[shape=ellipse, peripheries=1, label="(8,5)"];
Subgroup69[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup70[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup71[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup72[shape=ellipse, peripheries=1, label="(8,5)"];
Subgroup73[shape=ellipse, peripheries=1, label="(8,5)"];
Subgroup74[shape=ellipse, peripheries=1, label="(8,5)"];
Subgroup75[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup76[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup77[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup78[shape=ellipse, peripheries=1, label="(8,2)"];
Subgroup79[shape=ellipse, peripheries=1, label="(8,2)"];
Subgroup80[shape=ellipse, peripheries=1, label="(8,2)"];
Subgroup81[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup82[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup83[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup84[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup85[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup86[shape=ellipse, peripheries=1, label="(8,3)"];
Subgroup87[shape=ellipse, peripheries=1, label="(12,4)"];
Subgroup88[shape=ellipse, peripheries=1, label="(12,4)"];
Subgroup89[shape=ellipse, peripheries=1, label="(12,4)"];
Subgroup90[shape=ellipse, peripheries=1, label="(12,4)"];
Subgroup91[shape=ellipse, peripheries=1, label="(12,3)"];
Subgroup92[shape=ellipse, peripheries=1, label="(16,11)"];
Subgroup93[shape=ellipse, peripheries=1, label="(16,11)"];
Subgroup94[shape=ellipse, peripheries=1, label="(16,11)"];
Subgroup95[shape=ellipse, peripheries=1, label="(24,12)"];
Subgroup96[shape=ellipse, peripheries=1, label="(24,12)"];
Subgroup97[shape=ellipse, peripheries=1, label="(24,13)"];
Subgroup98[shape=ellipse, peripheries=1, label="(48,48)"];
}

I've yet to put in the code for the subgroup membership relations, partly because I don't want to do to all that work unless I can actually fix this ranking issue.

(Sidenote: I had to manually add the 4 spaces to each line because it wouldn't copy+paste right, seemed to be mistaking the linebreaks in my graphviz codes as linebreaks here, thereby ending the codeblock, how do I avoid this in the future?)


Solution

  • Subgroup29 is same rank as both Order4 and Order8 making Order4 effectively coursing Order4 and Order8 to have same rank, renaming one of the occurrences solves the problem