Erstellen eines Graphen mit Kanten in verschiedenen Farben in Mathematica
-
29-09-2019 - |
Frage
Ich möchte ein Graph (Graphentheorie), wo bestimmte Kanten eine andere Farbe zu anderen Kanten erzeugen, die verwendet werden würde, einen Pfad in dem Graphen von einer Ecke zur anderen zu markieren.
Hier sind einige Beispiele, die verschiedene farbige Ränder haben http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/ und http://demonstrations.wolfram.com/Ramsey336/ . Ich suchte diese auf Quellcode aber diese Lösungen scheinen kompliziert. Ich brauche ein einfaches Beispiel zur Arbeit aus. Ich rechne damit, ich brauche die EdgeRenderingFunction als eine der Optionen für GraphPlot
zu verwenden.
Zusätzlich unter EdgeRenderingFunction Dokumentation in „Mehr Information“Teil es sagt:
Das sieht nützlich, aber leider gibt es keine Beispiele codiert, um zu versuchen.
Unter dem sehr wörtlich habe ich versucht, Dinge wie
GraphPlot [{1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, VertexLabeling -> True,
EdgeRenderingFunction -> g [{1, 2}, {1, 2}, Rot]]
Aber das würde nicht funktionieren. Es wird etwas klüger als das nehmen.
Lösung
Hier ist ein Beispiel, das zeigt, wie die Hervorhebung eines bestimmten Pfades durch eine grafische Darstellung zu automatisieren.
Hier ist ein dummer Graph, durch eine Liste von Rand Regeln festgelegt:
edges = Table[i -> Mod[1 + i^2, 10], {i, 0, 9}];
GraphPlot[edges, VertexLabeling -> True]
Hier ist ein Weg durch den Graphen wir hervorheben möchten.
path = {0, 1, 2, 5, 6, 7, 0};
Lassen Sie uns Partition der Weg in Kanten, damit der Tatsache Rechnung, dass wir den Rand unabhängig von seiner Orientierung hervorheben möchten.
edgesToHighlight = Partition[path, 2, 1];
edgesToHighlight = Join[edgesToHighlight,
Reverse /@ edgesToHighlight];
Wir schreiben eine EdgeRenderingFunction
, die eine Kante in einem von zwei Arten machen, je nicht, ob es in unserer Liste ist oder nicht.
erf[pts_, edge_, ___] := If[MemberQ[edgesToHighlight, edge],
{Thick, Black, Arrow[pts, 0.1]}, {Darker[Red], Line[pts]}];
Schließlich zeigen wir das Ergebnis aus.
GraphPlot[edges, EdgeRenderingFunction -> erf,
VertexLabeling -> True]
Andere Tipps
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]}
&)
]
Die Rendering-Funktion ist eine Callback-Funktion, die drei Argumente annimmt. Die erste ist die Liste der Koordinaten der Linie, die zweite ist die Eckpunkte der Kante, und die dritte ist die Beschriftung der Kante.
In Mathematica Sie könnte eine anonyme Funktion mit (f[#1,#2,#3,...] &)
erstellen.