Domanda

I desidera creare un grafico (grafico Theory) dove alcuni bordi hanno un colore diverso da altri bordi, che verrebbe utilizzato per evidenziare un percorso nel grafico da un vertice all'altro.

Ecco alcuni esempi che hanno diversi bordi colorati http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/ e http://demonstrations.wolfram.com/Ramsey336/ . Ho guardato il codice sorgente per questi, ma quelle soluzioni sembrare complicato. Ho bisogno di un semplice esempio su cui lavorare. Mi sa che ho bisogno di usare l'EdgeRenderingFunction come una delle opzioni per GraphPlot.

Inoltre sotto EdgeRenderingFunction documentazione in "Altro Informazioni" parte che dice:

grafica Mathematica

Questo sembra utile, ma purtroppo non c'è esempi da provare codificato.

Prendendo quel letteralmente ho provato cose come

  

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

Ma che non avrebbe funzionato. Ci vorrà qualcosa di più intelligente di quello.

È stato utile?

Soluzione

Ecco un esempio che illustra come automatizzare l'evidenziazione di un particolare percorso attraverso un grafico.

Ecco un grafico stupido, specificata da un elenco di regole bordo:

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

grafica Mathematica

Ecco un percorso attraverso il grafico vorremmo evidenziare.

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

partizione di lasciare che il percorso in bordi, la contabilità per il fatto che vogliamo evidenziare indipendente bordo del suo orientamento.

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

Scriviamo un EdgeRenderingFunction che rende un vantaggio in uno dei due stili, no a seconda che si tratti di nella nostra lista oppure no.

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

Infine, visualizziamo il risultato.

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

grafica Mathematica

Altri suggerimenti

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

grafica Mathematica

La funzione di rendering è una funzione di callback, che prende 3 argomenti. Il primo è la lista delle coordinate della linea, il secondo è i vertici del bordo, e il 3 ° è l'etichetta del bordo.

In Mathematica è possibile creare una funzione anonima con (f[#1,#2,#3,...] &).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top