How to customize arrow of directed graph (digraph)

40 views (last 30 days)
I am attempting to plot a weighted directed graph that displays weights via augmenting edge thickness. My (pseduo)code thus far is:
G=digraph(weights);
G.Edges.Weight=weightsVec;
G.Edges.LWidths = 6*G.Edges.Weight/max(G.Edges.Weight);
p=plot(G);
p.LineWidth=G.Edges.LWidths;
p.ArrowSize=15;
This works pretty well, but I find that the increased edge widths covers up arrowheads on some of the edges. An obvious fix would be to use larger arrowheads, but this usually ends up looking terrible if your graph has many connections of varying weights (arrowheads look ridiculously large for weights of smaller magnitute). Another way to fix this would be to change the color of the arrowhead (and not the edge, itself) or change the position of the arrowhead to the end of the edge line. Both options appear to be unavailable for the directed graph object. Does anyone have any workarounds?
P.S. I know that there is an option to use a color scale to display edge weights, but I am trying to avoid this approach.

Accepted Answer

Christine Tobler
Christine Tobler on 17 Dec 2018
Since R2018b, there is a property ArrowPosition which allows the arrowhead to move around along the edge.
There is no way of changing the color of the arrowheads separately from the color of the edge. If you really want this, I'd suggest making two graph plots, one on top of the other, and setting edge LineStyle to 'none' for one (which represents the arrows only), while setting ShowArrows to false for the other (which represents only the edges). At that point, you can choose two different edge colors that will affect either the edge lines or the arrows.

More Answers (0)

Categories

Find more on 2-D and 3-D Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!