# Coloring edges in GraphPlot

I'm a little stuck with graph drawing part of my research — I can't use the Graph function for plotting my graphs, because my graph is a multi-graph. Graph is convenient because it colors edges quite easily.

Since I have a 3-regular (or even 4-regular) graph, where there are 3 (or 4) perfect matching, I want each of the matching to be colored differently.

What's the best way to color a group of edges (each perfect matching with it's own color) in the given adjacency list in GraphPlot? To simplify it, we can assume, that groups goes one by one (e.g. we have 6 edges: 3 groups of two edges, following each other

{1<->2, 3<->4, 1<->3, 2<->4, 1<->2, 3<->4}


In Graph, I've constructed a nice lambda function, that wraps all elements of a list in a Style function, that colors the edge. But in a GraphPlot I can't wrap edges in a Style function.

There's an EdgeRenderingFunction, wich draws all the edges. How do I put three different EdgeRenderingFunctions for the one edge-set? Or is that the wrong way to go?

Any ideas, how to do that?

The labeled answer is absolutely correct. Little generalization of what I needed and how to implement it:

  GraphPlot[{{1 -> 2, 1}, {3 -> 4, 1}, {1 -> 3, 2}, {2 -> 4, 2}, {1 -> 2, 3},
{3 -> 4, 3}}, MultiedgeStyle -> .2,
EdgeRenderingFunction -> (Switch[#3, 1, {Red, Line[#1]},
2, {Blue, Line[#1]}, 3, {Green, Line[#1]},
4, {Dashed, Line[#1]}] &), VertexLabeling -> True,
Method -> "CircularEmbedding"]


• Have you tried using EdgeRenderingFunction? Commented Apr 19, 2012 at 18:03
• That's one of the first things I've looked into. But I haven't found a way to implement three different EdgeRenderingFunction for the same graph, separating edge groups. Commented Apr 19, 2012 at 19:04

l = {{1, 3}, {3, 4}};
GraphPlot[{1 -> 2, 3 -> 4, 1 -> 3, 2 -> 4, 1 -> 2, 3 -> 4},
EdgeRenderingFunction -> (If[
Intersection[l, {#2}] != {}, {Red, Arrow[#1, .1]},
{Blue,Arrow[#1, .1]}] &)]


Edit

Using edge labels:

l = {1, 3};
GraphPlot[{{1 -> 2, 1}, {3 -> 4, 2}, {1 -> 3, 3}, {2 -> 4, 4}, {1 -> 2, 5}, {3 -> 4, 6}},
EdgeRenderingFunction -> (If[
Intersection[l, {#3}] != {}, {Red, Arrow[#1, .1]}, {Blue, Arrow[#1, .1]}] &)]


• Thanks for such a quick response! Your example helps me to understand that EdgeRenderingFunction deeper, than earlier. But your way has two disadvantages for me: 1) a have to create some special set to work with, which is quite difficult, since a want to visualize a lot of data 2) in your code there're two matchings that are highlighted with the same color. You way works with the edge properties, but if there're two same edge sets, that I want to highlight differently, it won't work. I was thinking about coloring them according to their number in the given edge list. Commented Apr 19, 2012 at 18:26
• @SergeyAganezovjr See edit Commented Apr 19, 2012 at 18:40
• Now it's exactly what I needed! Thanks a lot! Commented Apr 19, 2012 at 18:51
• Never crossed my mind, I can use the label option of an edge as a color-switcher one! Commented Apr 19, 2012 at 19:01
• @SergeyAganezovjr You can consider it a "tag" for storing useful info about the graph. Commented Apr 19, 2012 at 19:07

I interpreted the problem as requiring two different colors if the edges were duplicated:

normal[{x_, y_}] := 0.03*{-y, x}/Norm[{x, y}];
GraphPlot[{1 -> 2, 3 -> 4, 1 -> 3, 2 -> 4, 1 -> 2, 3 -> 4},
VertexLabeling -> True,
EdgeRenderingFunction -> (If[Length[#1] > 2,
norm = normal[First[#1] - Last[#1]]; {Red,
Arrow[{First[#1] + norm, Last[#1] + norm}, .08], Blue,
Arrow[{First[#1] - norm, Last[#1] - norm}, .08]},
Arrow[#1, .08]] &)]


• thanks for your answer, that's another way to look at my problem. Sorry for that formulation; my goal was to color different perfect matchings with different colors. Commented Apr 19, 2012 at 19:02
• Perhaps I don't understand what is meant by a "perfect matching". Would you kindly explain? Commented Apr 19, 2012 at 19:08
• Sure. You can find some info about that here and here. In simple terms: it's an edge set, that covers all the vertices, and there're no two edges, that would contain the same vertex. Commented Apr 19, 2012 at 19:24
• Thanks for the explanation and links. Commented Apr 19, 2012 at 23:34