Question

Je veux créer un graphique (Théorie des graphes) où certains bords ont une couleur différente à d'autres bords, qui seraient utilisés pour mettre en évidence un chemin dans le graphe d'un sommet à l'autre.

Voici quelques exemples qui ont des bords colorés http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/ et http://demonstrations.wolfram.com/Ramsey336/ . Je regardais le code source pour ces derniers mais ces solutions semblent compliquées. J'ai besoin d'un exemple simple à travailler. Je pense que je dois utiliser le EdgeRenderingFunction comme l'une des options pour GraphPlot.

De plus en documentation EdgeRenderingFunction dans « Plus Information » partie il dit:

graphiques Mathematica

Cela semble utile, mais il n'y a malheureusement pas codé exemples pour essayer.

La prise que très littéralement j'ai essayé des choses comme

  

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

Mais cela ne fonctionnerait pas. Il faudra quelque chose de plus intelligent que cela.

Était-ce utile?

La solution

Voici un exemple qui illustre comment automatiser la mise en évidence d'un chemin particulier par un graphique.

Voici un graphique stupide, spécifié par une liste de règles de bord:

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

graphiques Mathematica

Voici un chemin à travers le graphique que nous aimerions souligner.

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

La partition Let le chemin dans les bords, ce qui représente le fait que nous voulons souligner l'indépendance de bord de son orientation.

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

Nous écrivons un EdgeRenderingFunction qui rend un avantage dans l'un des deux styles, en fonction pas que ce soit dans notre liste ou non.

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

Enfin, nous affichons le résultat.

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

graphiques Mathematica

Autres conseils

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

graphiques Mathematica

La fonction de rendu est une fonction de rappel, qui prend 3 arguments. La 1ère est la liste des coordonnées de la ligne, la 2e est les sommets du bord, et le 3e est l'étiquette du bord.

Dans Mathematica vous pouvez créer une fonction anonyme avec (f[#1,#2,#3,...] &).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top