5

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

エッジの色が異なる例をいくつか示しますhttp://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/http://demonstrations.wolfram.com/Ramsey336/ . これらのソース コードを見ましたが、これらのソリューションは複雑に見えます。作業するための簡単な例が必要です。のオプションの 1 つとして EdgeRenderingFunction を使用する必要があると思いますGraphPlot

さらに、「詳細情報」部分 のEdgeRenderingFunctionドキュメントの下には、次のように記載されています。

Mathematica グラフィックス

これは便利そうに見えますが、残念ながら試すコード例はありません。

それを文字通り取って、私は次のようなことを試しました

GraphPlot[{1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, VertexLabeling -> True,
EdgeRenderingFunction -> g[{ 1, 2}, {1, 2}, 赤]]

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

4

2 に答える 2

6

これは、グラフを介した特定のパスの強調表示を自動化する方法を示す例です。

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

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

Mathematicaグラフィックス

これが、強調したいグラフのパスです。

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グラフィックス

于 2010-10-10T00:53:09.980 に答える
1
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 グラフィックス

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

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

于 2010-10-09T19:22:09.217 に答える