質問

特定のエッジが他のエッジとは異なる色を持つグラフ(グラフ理論)を作成したいと思います。これは、グラフのパスをある頂点から別の頂点まで強調するために使用されます。

異なる色のエッジを持ついくつかの例を以下に示します http://demonstrations.wolfram.com/agraphtheortionted ofthefirstnintegers/http://demonstrations.wolfram.com/ramsey336/. 。これらのソースコードを見ましたが、それらのソリューションは複雑に見えます。仕事に簡単な例が必要です。 EdgerEnderingFunctionを使用する必要があると思います GraphPlot.

さらに下 edgerenderingFunction 「詳細情報」パートのドキュメントと書かれています:

Mathematica graphics

これは便利に見えますが、残念ながら試してみるコード化された例はありません。

文字通り、私はそのようなことを試しました

graphplot [{1-> 2、2-> 3、3-> 4、4-> 1、2-> 4、4-> 5、4-> 6}、vertexlabeling-> true、
edgerenderingFunction-> g [{1、2}、{1、2}、赤]]

しかし、それはうまくいきません。それよりも賢いものが必要です。

役に立ちましたか?

解決

グラフを介した特定のパスの強調表示を自動化する方法を示す例を以下に示します。

これは、エッジルールのリストで指定された愚かなグラフです。

edges = Table[i -> Mod[1 + i^2, 10], {i, 0, 9}];
GraphPlot[edges, VertexLabeling -> True]

Mathematica graphics

これが私たちが強調したいグラフを通るパスです。

path = {0, 1, 2, 5, 6, 7, 0};

パスをエッジに分けて、その方向とは無関係にエッジを強調したいという事実を説明しましょう。

edgesToHighlight = Partition[path, 2, 1];
edgesToHighlight = Join[edgesToHighlight,
    Reverse /@ edgesToHighlight];

私たちは書きます EdgeRenderingFunction これは、リストに含まれているかどうかに応じて、2つのスタイルのいずれかでエッジをレンダリングします。

erf[pts_, edge_, ___] := If[MemberQ[edgesToHighlight, edge],
    {Thick, Black, Arrow[pts, 0.1]}, {Darker[Red], Line[pts]}];

最後に、結果を表示します。

GraphPlot[edges, EdgeRenderingFunction -> erf,
    VertexLabeling -> True]

Mathematica graphics

他のヒント

GraphPlot[
 {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, 
 VertexLabeling -> True, 
 EdgeRenderingFunction -> (
    {If[#2 == {1, 2}, Red, Black], 
     Line[#1]}
  &)
]

Mathematica graphics

レンダリング関数はコールバック関数であり、3つの引数を取ります。最初はラインの座標のリスト、2番目はエッジの頂点、3番目はエッジのラベルです。

Mathematicaでは、匿名関数を作成できます (f[#1,#2,#3,...] &).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top