I have a directed graph based on a Markov Chain. First I would like to know: how can I place the node name/number inside the circle?
Second, the graph is frequently displayed asymmetrically even though it is a symmetric graph. By symmetric, I mean that there is a main (shortest) path 1->2->3->4->5
(where 5 is the terminal node/state) and vertices 1,2 and 3 each have 4 nodes. This is the code I used:
g = Graph[{Style[DirectedEdge[1, 2], Green], DirectedEdge[1, 6],
DirectedEdge[1, 8], DirectedEdge[1, 7], DirectedEdge[1, 9],
Style[DirectedEdge[2, 3], Green], DirectedEdge[2, 10],
DirectedEdge[2, 12], DirectedEdge[2, 11], DirectedEdge[2, 13],
Style[DirectedEdge[6, 1], Green], DirectedEdge[6, 8],
Style[DirectedEdge[8, 1], Green], Style[DirectedEdge[7, 1], Green],
DirectedEdge[7, 9], Style[DirectedEdge[9, 1], Green],
Style[DirectedEdge[3, 4], Green], DirectedEdge[3, 14],
DirectedEdge[3, 16], DirectedEdge[3, 15], DirectedEdge[3, 17],
Style[DirectedEdge[10, 2], Green], DirectedEdge[10, 12],
Style[DirectedEdge[12, 2], Green],
Style[DirectedEdge[11, 2], Green], DirectedEdge[11, 13],
Style[DirectedEdge[13, 2], Green],
Style[DirectedEdge[4, 5], Green], DirectedEdge[4, 18],
DirectedEdge[4, 20], DirectedEdge[4, 19], DirectedEdge[4, 21],
Style[DirectedEdge[14, 3], Green], DirectedEdge[14, 16],
Style[DirectedEdge[16, 3], Green],
Style[DirectedEdge[15, 3], Green], DirectedEdge[15, 17],
Style[DirectedEdge[17, 3], Green],
Style[DirectedEdge[5, 5], Green],
Style[DirectedEdge[18, 4], Green], DirectedEdge[18, 20],
Style[DirectedEdge[20, 4], Green],
Style[DirectedEdge[19, 4], Green], DirectedEdge[19, 21],
Style[DirectedEdge[21, 4], Green]}, VertexLabels -> "Name",
VertexStyle -> Yellow, EdgeStyle -> Red, VertexSize -> .5]
Node 1 looks good where there are two possible nodes on each side. Node 2 reverses the direction of arrows in the child nodes relative to node 1. Node 3 is screwed up, though as the symmetry is lost. Nodes 15 and 17 are reversed as well so the arrow between them points the wrong way relative to the other edge arrows. Additionally, the length of arrows between main nodes is too large.
To summarize:
- How to put node name/number inside circle?
- How to ensure symmetry in display. Can I choose arrangement of nodes?
- Can I shorten or lengthen arrows with styling?
These are all directly related issues, so I didn't make separate questions. I can break it up as needed.
GraphPlot
than by direct manipulation ofGraph
expressions. $\endgroup$