Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mathematica GraphPlot and the EdgeRenderingFunction

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?

like image 380
Gleno Avatar asked Apr 22 '26 20:04

Gleno


2 Answers

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

like image 172
Mark McClure Avatar answered Apr 24 '26 11:04

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.

like image 21
Simon Avatar answered Apr 24 '26 09:04

Simon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!