¿Hay alguna forma de abstraer el orden de los vértices que GraphPlot aplica a VertexCoordinate Rules desde (FullForm o InputForm) del gráfico producido por GraphPlot? No quiero usar la función GraphUtilities VertexList. También conozco GraphCoordinates, pero ambas funciones funcionan con el gráfico, NO con la salida de gráficos de GraphPlot.VertexCoordinate Rules y VertexList de GraphPlot Graphic
Por ejemplo,
gr1 = {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6, 6 -> 1};
gp1 = GraphPlot[gr1, Method -> "CircularEmbedding",
VertexLabeling -> True];
[email protected](gp1 /. Graphics[Annotation[x___], ___] :> {x})
dicta la siguiente lista de seis pares de coordenadas:
VertexCoordinateRules -> {{2., 0,866025}, {1,5, 1,73205}, {0,5, 1,73205} , {0., 0.866025}, {0.5, 1.3469 * 10^-10}, {1.5, 0.}}
¿Cómo sé qué regla se aplica a qué vértice, y puedo estar seguro de que esto es lo mismo que el dado por VertexList [gr1]?
Por ejemplo
Needs["GraphUtilities`"];
gr2 = [email protected]
Map[# -> 1 &, EdgeList[{2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6}]];
VertexList[gr2]
da {1, 2, 3, 4, 5}
Pero ....
gp2 = GraphPlot[gr2, VertexLabeling -> True,
VertexCoordinateRules ->
Thread[VertexList[gr1] ->
[email protected](gp1 /. Graphics[Annotation[x___], ___] :> {x})[[2]]]];
[email protected](gp2 /. Graphics[Annotation[x___], ___] :> {x})
da seis coordenadas conjuntos:
VertexCoordinateRules -> {{2., 0.866025}, {1.5, 1.73205}, {0.5, 1.73205}, {0., 0.866025}, {0.5, 1.3469 * 10^- 10}, {1.5, 0.}}
¿Cómo puedo abstraer la VertexList correcta para VertexCoordinateRules para gr2, por ejemplo?
(Soy consciente de que puedo corregir cosas mediante la adopción de la VertexList después de generar GR2 de la siguiente manera, por ejemplo)
[email protected]
SparseArray[
Map[# -> 1 &, EdgeList[{2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6}]], {6, 6}]
{1, 2, 3, 4, 5, 6}
pero la información que necesito parece estar presente en el gráfico GraphPlot: ¿cómo puedo obtenerla?
(La razón convierto el gráfico para una matriz de adyacencia él que, como se ha señalado por Carl Woll de Wolfram, que me permite incluir un nodo 'huérfano', como en la GP2)
por cierto, otra manera de representar gráficos desconectados con el borde list es tener i-> bordes para cada nodo. Puede necesitar SelfLoopStyle-> None durante el trazado –
Sí, ¡eso es cierto! Solía usarlo antes de enterarme del método de Carl Woll. A veces necesito mostrar bucles automáticos y (por ahora) prefiero el método de la matriz de adyacencia. – tomd
Creo que ambos son útiles: la matriz de adyacencia es más conveniente si está examinando gráficos o haciendo modificaciones que no cambian el número de vértices, mientras que edgelist es mejor cuando necesita hacer cosas como dividir el gráfico en dos –