Немного обобщив ответ Самсдрама, я получаю
GraphPlotHighlight[edges:{((_->_)|{_->_,_})..},hl:{___}:{},opts:OptionsPattern[]]:=Module[{verts,coords,g,sub},
verts=Flatten[edges/.Rule->List]//.{a___,b_,c___,b_,d___}:>{a,b,c,d};
g=GraphPlot[edges,FilterRules[{opts}, Options[GraphPlot]]];
coords=VertexCoordinateRules/.Cases[g,HoldPattern[VertexCoordinateRules->_],2];
sub=Flatten[Position[verts,_?(MemberQ[hl,#]&)]];
coords=coords[[sub]];
Show[Graphics[{OptionValue[HighlightColor],CapForm["Round"],JoinForm["Round"],Thickness[OptionValue[HighlightThickness]],Line[AppendTo[coords,First[coords]]],Polygon[coords]}],g]
]
Protect[HighlightColor,HighlightThickness];
Options[GraphPlotHighlight]=Join[Options[GraphPlot],{HighlightColor->LightBlue,HighlightThickness->.15}];
Некоторые из приведенного выше кода могут быть немного более надежными, но это работает:
GraphPlotHighlight[{b->c,a->b,c->a,e->c},{b,c,e},VertexLabeling->True,HighlightColor->LightRed,HighlightThickness->.1,VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .06],
Black, Text[#2, #1]} &)]
РЕДАКТИРОВАТЬ # 1:
Уточненную версию этого кода можно найти по адресу http://gist.github.com/663438
РЕДАКТИРОВАТЬ # 2:
Как обсуждалось в комментариях ниже, шаблон, которому должен соответствовать edges
, представляет собой список правил края с необязательными метками. Это немного менее общее, чем то, что используется функцией GraphPlot
(и версией в приведенном выше gist ), где правила ребер также могут быть заключены в Tooltip
.
Чтобы найти точный шаблон, используемый GraphPlot
, я неоднократно использовал Unprotect[fn];ClearAttributes[fn,ReadProtected];Information[fn]
, где fn
- интересующий объект, пока не обнаружил, что он использовал следующую (очищенную) функцию:
Network`GraphPlot`RuleListGraphQ[x_] :=
ListQ[x] && Length[x] > 0 &&
And@@Map[Head[#1] === Rule
|| (ListQ[#1] && Length[#1] == 2 && Head[#1[[1]]] === Rule)
|| (Head[#1] === Tooltip && Length[#1] == 2 && Head[#1[[1]]] === Rule)&,
x, {1}]
Я думаю, что мой edges:{((_ -> _) | (List|Tooltip)[_ -> _, _])..}
шаблон эквивалентен и более лаконичен ...