# How to eliminate truncated graph arrowheads?

The following simple directed graph has truncated arrowheads:

vpos = {'W':(-0.5,0.5),'E':(0.5,0.5),'mW':(-0.5,0),'mE':(0.5,0)}
D1 = DiGraph()
D1.show(pos=vpos,vertex_size=500,figsize=(2,2))


If I change the last statement to:

D1.show(pos=vpos)


I still get truncated horizontal arrows, but less on the vertical.

Any suggestions for preserving full arrowheads? It looks like the clip limits for arrows are different than those for vertices. Setting fig_tight=False has no effect.

edit retag close merge delete

Sort by » oldest newest most voted

Hello, @holistone! I am not 100% sure about the reason for this mutilated arrows, but your conjecture that it could be due to the limits for the vertices and edges being different seems correct; at least there is evidence of that (more on that below).

The easiest way to solve your problem is to use the xmin, xmax, ymin and ymax arguments for the show() method. In your particular case, I can see the positions of your vertices are set by the vpos dictionary, which effectively sets the plotting intervals to be $[-0.5,0.5]$ for the $x$-axis and $[0,0.5]$ for the $y$-axis. Thus, we are going to use slightly bigger intervals (for example, $[-0.6,0.6]$ for the $x$-axis and $[-0.1,0.6]$ for the $y$-axis), as in the following code:

vpos = {'W':(-0.5,0.5),'E':(0.5,0.5),'mW':(-0.5,0),'mE':(0.5,0)}
D1 = DiGraph()
D1.show(pos=vpos,vertex_size=500,figsize=(2,2), xmin=-0.6, xmax=0.6, ymin=-0.1, ymax=0.6)


This is the result:

Of course, you can play around with those parameters in order to adjust the layout to your predilection.

Just a side note: In some cases, it seems to be a good choice to add a 10% of the total width to the left and the right, and a 10% of the total height to the top and the bottom of the plot.

Now, this is why I believe that your hypothesis about the mutilated edges is true: If you try to replace the last line of the previous code with

D1.show(pos=vpos,vertex_size=500,figsize=(2,2), xmin=-0.4, xmax=0.4, ymin=0.1, ymax=0.4)


which is a way to small plotting area, you get the following image:

As you can see, your hypothesis correctly predicts that the vertices are indeed displayed (despite of being too few alloted space), but the edges disappeared because there is not enough "area" to plot them.

I hope this helps!

more