有什么方法可以从GraphPlot生成的图形的(FullForm或InputForm)中抽象GraphPlot应用于VertexCoordinate规则的顶点顺序吗?我不想使用GraphUtilities函数VertexList。我也知道GraphCoordinates,但是这两个函数都可用于图形,而不是GraphPlot的图形输出。

例如,

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

给出以下六个坐标对的列表:

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

我怎么知道哪个规则适用于哪个顶点,我可以确定这是
与VertexList [gr1]给出的相同?

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

    VertexList[gr2]

给出{1,2,3,4,5}

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

给出六个坐标集:

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

例如,如何为gr2的VertexCoordinateRules抽象正确的VertexList?

(例如,我知道我可以通过在生成gr2之后采用VertexList来纠正问题,例如)
VertexList@
 SparseArray[
  Map[# -> 1 &, EdgeList[{2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6}]], {6, 6}]

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

但是我需要的信息似乎出现在GraphPlot图形中:如何获得它?

(之所以将图转换为邻接矩阵的原因,正如Wolfram的Carl Woll指出的那样,它使得我可以像gp2一样包含一个“孤立”节点)

最佳答案

p2 = Normal@gp1 // Cases[#, Line[points__] :> points, Infinity] &;
p3 = Flatten[p2, 1];
ListLinePlot[p3[[All, 1 ;; 2]]]
wolfram-mathematica - GraphPlot图形中的VertexCoordinate规则和VertexList-LMLPHP
V12.0.0

关于wolfram-mathematica - GraphPlot图形中的VertexCoordinate规则和VertexList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4245946/

10-11 13:02