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:

Mathematica-Grafik

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.

War es hilfreich?

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]

Mathematica-Grafik

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]

Mathematica-Grafik

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]}
  &)
]

Mathematica-Grafik

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top