Here's one can be considered:
colorFuncSet[edge_, clist_] :=
With[{a = Unique["x"]}, {Inactive[a],
Inactive[edge -> (a = 0; {a++; clist[[a]], Arrow[#]} &)]}]
SetColorFunction[edgeset_] :=
Block[{gather},
gather =
colorFuncSet[#[[1, 1]], #[[All, 2]]] & /@ GatherBy[edgesets, First];
(With[{var = gather[[All, 1]], cont = gather[[All, 2]]},
Hold@Module[var, cont]] /. Inactive[x_] :> x)
]
Example:
edgesets = {"P" \[DirectedEdge] "M" -> RGBColor[1, 0, 0],
"M" \[DirectedEdge] "P" -> RGBColor[1, 0, 0],
"P" \[DirectedEdge] "Q" -> RGBColor[1, 0, 0],
"Q" \[DirectedEdge] "M" -> RGBColor[1, 0, 0],
"M" \[DirectedEdge] "V" -> RGBColor[0, 0, 1],
"V" \[DirectedEdge] "M" -> RGBColor[0, 0, 1],
"P" \[DirectedEdge] "V" -> RGBColor[0, 0, 1],
"Q" \[DirectedEdge] "V" -> RGBColor[0, 0, 1],
"V" \[DirectedEdge] "P" -> RGBColor[0, 0, 1],
"V" \[DirectedEdge] "Q" -> RGBColor[0, 0, 1],
"P" \[DirectedEdge] "Q" -> RGBColor[0.5, 0, 0.5],
"Q" \[DirectedEdge] "M" -> RGBColor[0.5, 0, 0.5],
"M" \[DirectedEdge] "Q" -> RGBColor[0.5, 0, 0.5],
"P" \[DirectedEdge] "V" -> RGBColor[0.5, 0, 0.5],
"V" \[DirectedEdge] "Q" -> RGBColor[0.5, 0, 0.5],
"M" \[DirectedEdge] "V" -> RGBColor[0.5, 0, 0.5]};
coloredges = SetColorFunction[edgesets];
MVPQGraph =
Graph[{"M", "V", "P", "Q"}, edgesets[[All, 1]],
VertexSize -> .09*(5/3),
VertexLabels ->
Placed["Name", Center], (*EdgeLabels\[Rule]edgelabels ,*)
VertexShapeFunction -> "RoundedSquare",
VertexStyle -> Hue[0.125, 0.7, 0.9],
VertexLabelStyle -> Directive[Bold, FontFamily -> "Arial", 12],
EdgeStyle -> Arrowheads[{{.03 , .3}}],
EdgeShapeFunction -> ReleaseHold[coloredges]]
