While I'm waiting for the sorting to finish, I would like to adjust a part of Mathematica graph I'm working on. The problem is that nodes are on top of edges, I wonder if there is a way to reverse that. In the image you can see that arrows are not showing proper...
I'm doing a GraphPlot[] with custom VertexRenderingFunction and EdgeRenderingFunction paramaters. It looks something like this:
Where are the arrows? Can you see them? Did you take my arrows? http://img816.imageshack.us/img816/9703/graphbadarrows.png
As you can see, it would be as they say cool if the arrows were on top of the nodes. Is there an easy way to hax it in?
I don't know if there is a way to do this directly with GraphPlot options or not but you could manipulate the Graphics object produced by GraphPlot directly. For example, here's a graph whose features are similar to yours.
bg = GraphPlot[Table[i -> Mod[3 i + 1, 9],
{i, 0, 8}], DirectedEdges -> True,
VertexRenderingFunction -> (
{{White, Disk[#, 0.15]}, Circle[#, 0.15]} &),
EdgeRenderingFunction -> (Arrow[#1] &)]
You can examine the structure of the Graphics primitives and directives as follows:
bg // InputForm
You can see that the arrows are placed down before the vertices. Simply reverse this as follows.
MapAt[Reverse, bg, {1, 1}]
Of course, your Graphics object will likely have a different structure.
Mark McClure
Mark's answer does exactly what you asked for -- and you could write your own function that automates the Reverse.
A less direct solution might be to just draw the arrow heads back from the end a little:
GraphPlot[Table[i -> Mod[3 i + 1, 9], {i, 0, 8}],
VertexRenderingFunction -> ({{White, Disk[#, 0.15]},
Circle[#, 0.15]} &), DirectedEdges -> True,
EdgeRenderingFunction -> ({Arrowheads[{{.05, .8}}], Red,
Arrow[#]} &)]
This would also reduce the congestion at the nodes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With