Pregunta

Quiero crear un gráfico (Graph Theory) donde ciertos bordes tienen un color diferente a otros bordes, que se utiliza para resaltar una ruta en el gráfico a partir de un vértice a otro.

Estos son algunos ejemplos que tienen diferentes aristas de color http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/ y http://demonstrations.wolfram.com/Ramsey336/ . Miré al código fuente de estos, pero esas soluciones parecen complicados. Necesito un ejemplo sencillo para trabajar. Creo que necesito para usar el EdgeRenderingFunction como una de las opciones para GraphPlot.

Además bajo EdgeRenderingFunction documentación en "Más Información" parte que dice:

Mathematica gráficos

Esto parece útil, pero por desgracia no hay ejemplos para probar codificado.

Teniendo esto muy literalmente, he intentado cosas como

  

GraphPlot [{1 -> 2, 2 -> 3, 3 -> 4, 4   -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, VertexLabeling -> Es cierto que
  EdgeRenderingFunction -> g [{1, 2}, {1,   2}, Rojo]]

Pero eso no funcionaría. Se necesitará algo más inteligente que eso.

¿Fue útil?

Solución

Aquí está un ejemplo que ilustra cómo automatizar el resaltado de un camino en particular a través de un gráfico.

Aquí está un gráfico tonto, especificada por una lista de reglas de borde:

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

Mathematica gráficos

Aquí hay un camino a través del gráfico nos gustaría destacar.

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

partición del la ruta en los bordes, lo que representa el hecho de que queremos resaltar el borde independiente de su orientación.

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

Escribimos un EdgeRenderingFunction que trasmite una ventaja en uno de los dos estilos, no dependiendo si está en nuestra lista o no.

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

Por último, se muestra el resultado.

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

Mathematica gráficos

Otros consejos

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 gráficos

La función de representación es una función de devolución de llamada, que toma 3 argumentos. La primera es la lista de las coordenadas de la línea, el segundo es los vértices del borde, y la tercera es la etiqueta del borde.

En Mathematica que podría crear una función anónima con (f[#1,#2,#3,...] &).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top