有什么方法可以从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]]]
V12.0.0
关于wolfram-mathematica - GraphPlot图形中的VertexCoordinate规则和VertexList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4245946/