1digraph { 2 compound=true 3 fontname="Inconsolata, Consolas" 4 fontsize=10 5 margin="0,0" 6 ranksep=0.2 7 penwidth=0.5 8 forcelabels=true 9 10 node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] 11 edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] 12 13 subgraph cluster1 { 14 margin="10,10" 15 labeljust="left" 16 label = "Before Moving" 17 style=filled 18 fillcolor=gray95 19 20 node [shape=Mrecord, style=filled, colorscheme=spectral7] 21 22 c1 [label="{contacts:array|}", fillcolor=4] 23 c11 [label="{|}"] 24 c12 [label="{|}"] 25 c13 [shape=none, label="...", style="solid"] 26 o1 [label="{o:object|}", fillcolor=3] 27 ghost [label="{o:object|}", style=invis] 28 29 c1 -> o1 [style="dashed", constraint=false, label="AddMember"] 30 31 edge [arrowhead=vee] 32 c1 -> { c11; c12; c13 } 33 o1 -> ghost [style=invis] 34 } 35 36 subgraph cluster2 { 37 margin="10,10" 38 labeljust="left" 39 label = "After Moving" 40 style=filled 41 fillcolor=gray95 42 43 node [shape=Mrecord, style=filled, colorscheme=spectral7] 44 45 c2 [label="{contacts:null|}", fillcolor=1] 46 c3 [label="{array|}", fillcolor=4] 47 c21 [label="{|}"] 48 c22 [label="{|}"] 49 c23 [shape="none", label="...", style="solid"] 50 o2 [label="{o:object|}", fillcolor=3] 51 cs [label="{string|\"contacts\"}", fillcolor=5] 52 c2 -> o2 [style="dashed", constraint=false, label="AddMember", style=invis] 53 54 edge [arrowhead=vee] 55 c3 -> { c21; c22; c23 } 56 o2 -> cs 57 cs -> c3 [arrowhead=none] 58 } 59 ghost -> o2 [style=invis] 60} 61