The order in which styles are applied is not necessarily the same as the order in which the edges are given. It would be much better to rely on the second argument of [`EdgeShapeFunction`](http://reference.wolfram.com/language/ref/EdgeShapeFunction) to control which styles are applied. Here is a version that does this: styleAssociation = AssociationThread[edgeList, styles]; Graph[ edgeList, VertexLabels->Automatic, EdgeShapeFunction->({styleAssociation[Sort@#2],Arrow@#}&) ] [![enter image description here][1]][1] [1]: https://i.sstatic.net/tlRKM.png