5 Stimmen

VertexCoordinate Rules und VertexList von GraphPlot Graphic

Gibt es eine Möglichkeit, die Vertex-Reihenfolge, die GraphPlot auf VertexCoordinate Rules anwendet, von der (FullForm oder InputForm) der von GraphPlot erzeugten Grafik zu abstrahieren? Ich möchte nicht die GraphUtilities-Funktion VertexList verwenden. Ich kenne auch GraphCoordinates, aber diese beiden Funktionen arbeiten mit dem Graphen, NICHT mit der Grafikausgabe von GraphPlot.

Zum Beispiel,

gr1 = {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6, 6 -> 1};
gp1 = GraphPlot[gr1, Method -> "CircularEmbedding", 
   VertexLabeling -> True];

Last@(gp1 /. Graphics[Annotation[x___], ___] :>  {x})

ergibt die folgende Liste von sechs Koordinatenpaaren:

VertexCoordinateRules -> {{2., 0.866025}, {1.5, 1.73205}, {0.5, 1.73205}, {0., 0.866025}, {0.5, 1.3469*10^-10}, {1.5, 0.}}

Woher weiß ich, welche Regel für welchen Scheitelpunkt gilt, und kann ich sicher sein, dass dies der Fall ist? mit der von VertexList[gr1] angegebenen Regel übereinstimmt?

Zum Beispiel

 Needs["GraphUtilities`"];
gr2 = SparseArray@ 
      Map[# -> 1 &, EdgeList[{2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6}]];

    VertexList[gr2]

ergibt {1, 2, 3, 4, 5}

Aber ....

    gp2 = GraphPlot[gr2, VertexLabeling -> True, 
      VertexCoordinateRules -> 
       Thread[VertexList[gr1] -> 
         Last@(gp1 /. Graphics[Annotation[x___], ___] :>  {x})[[2]]]];
Last@(gp2 /. Graphics[Annotation[x___], ___] :>  {x})

ergibt SIX Koordinatensätze:

VertexCoordinateRules -> {{2., 0.866025}, {1.5, 1.73205}, {0.5, 1.73205}, {0., 0.866025}, {0.5, 1.3469*10^-10}, {1.5, 0.}}

Wie kann ich die richtige VertexList für VertexCoordinateRules für gr2 abstrahieren, zum Beispiel?

(Ich bin mir bewusst, dass ich die Dinge korrigieren kann, indem ich die VertexList nach dem Erzeugen von gr2 wie folgt nehme, zum Beispiel)

VertexList@
 SparseArray[
  Map[# -> 1 &, EdgeList[{2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6}]], {6, 6}]

{1, 2, 3, 4, 5, 6}

aber die Informationen, die ich benötige, scheinen in der GraphPlot-Grafik vorhanden zu sein: Wie kann ich sie erhalten?

(Der Grund, warum ich den Graphen in eine Adjazenzmatrix umwandle, ist, wie Carl Woll von Wolfram feststellte, dass ich damit einen "verwaisten" Knoten einbeziehen kann, wie in gp2)

alt text

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X