Code here: https://github.com/ianmiell/pm-as-code I'm not a GV expert, so contributions/suggestions/critiques welcomed.
You might want to look at ordering things left to right with
rankdir=LR;
You can also force particular groups to be on the same row/column (rank).Also subgraphs to group certain sections if you want: http://graphs.grevian.org/example
This may also be useful to see the building up of a bit more complex graph http://larsbarkman.com/2015/08/26/alignmentmaps-with-graphvi...