Mathematicaで異なる色の端でグラフを作成する
-
29-09-2019 - |
質問
特定のエッジが他のエッジとは異なる色を持つグラフ(グラフ理論)を作成したいと思います。これは、グラフのパスをある頂点から別の頂点まで強調するために使用されます。
異なる色のエッジを持ついくつかの例を以下に示します http://demonstrations.wolfram.com/agraphtheortionted ofthefirstnintegers/ と http://demonstrations.wolfram.com/ramsey336/. 。これらのソースコードを見ましたが、それらのソリューションは複雑に見えます。仕事に簡単な例が必要です。 EdgerEnderingFunctionを使用する必要があると思います GraphPlot
.
さらに下 edgerenderingFunction 「詳細情報」パートのドキュメントと書かれています:
これは便利に見えますが、残念ながら試してみるコード化された例はありません。
文字通り、私はそのようなことを試しました
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]
これが私たちが強調したいグラフを通るパスです。
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]
他のヒント
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]}
&)
]
レンダリング関数はコールバック関数であり、3つの引数を取ります。最初はラインの座標のリスト、2番目はエッジの頂点、3番目はエッジのラベルです。
Mathematicaでは、匿名関数を作成できます (f[#1,#2,#3,...] &)
.