是 Graph 和相关函数的一个选项,指定使用哪种布局.
GraphLayout
布局方式列表 »是 Graph 和相关函数的一个选项,指定使用哪种布局.
更多信息
- 通常使用几个阶段计算图布局. 设置 GraphLayout->{s1->m1,…} 下,阶段 si 由方法 mi 处理.
- 可能的图布局阶段 si 是:
-
"VertexLayout" 如何嵌入顶点 "EdgeLayout" 如何规划边 "PackingLayout" 如何放置顶点组成的连通分量 - "VertexLayout" 方法包括:
-
Automatic 自动选择布局 None 不计算布局 "emb" 已命名的嵌入 - 可能的特殊嵌入 "emb" 包括:
-

"BipartiteEmbedding" 两条平行线上的顶点 
"CircularEmbedding" 圆圈上的顶点 
"CircularMultipartiteEmbedding" 圆圈弧段上的顶点 
"DiscreteSpiralEmbedding" 离散螺旋上的顶点 
"GridEmbedding" 网格上的顶点 
"LinearEmbedding" 直线上的顶点 
"MultipartiteEmbedding" 几条平行线上的顶点 
"SpiralEmbedding" 投射到二维的三维螺旋上的顶点 
"StarEmbedding" 带中心点的圆圈上的顶点 - 对于诸如树和有向无环图这样的分层图,可能的结构化嵌入 "emb" 包括:
-

"BalloonEmbedding" 以父顶点为中心的圆圈上的顶点 
"RadialEmbedding" 圆形弧段上的顶点 
"LayeredDigraphEmbedding" 有向无环图平行线上的顶点 
"LayeredEmbedding" 平行线上的顶点 
"SymmetricLayeredEmbedding" 对称平行线上的顶点 
"HyperbolicRadialEmbedding" 庞加莱圆盘上圆弧的顶点 - 可能的最优化嵌入 "emb" 都会最小化一个数量,包括:
-

"GravityEmbedding" 顶点为质点,边为弹簧的能量 
"HighDimensionalEmbedding" 高维空间中的弹簧-电子能量 
"PlanarEmbedding" 边交叉数目 
"SpectralEmbedding" 平方距离的加权和 
"SphericalEmbedding" 顶点在球面上且边作为弹簧的能量 
"SpringElectricalEmbedding" 以边为弹簧,以顶点为电子的能量 
"SpringEmbedding" 以边为弹簧的能量 
"TutteEmbedding" 边的交叉数目和到邻居的距离 
"HyperbolicSpringEmbedding" 庞加莱圆盘上以边为弹簧的能量 - "EdgeLayout" 方法包括:
-
"DividedEdgeBundling" 把边划分为线段束 "HierarchicalEdgeBundling" 根据分层树结构划分边 "StraightLine" 边之间的直线 - "PackingLayout" 方法包括:
-
"ClosestPacking" 从左上方开始的近似最紧密封装 "ClosestPackingCenter" 从中心开始的近似最紧密封装 "Layered" 从左上方开始按照层次排列 "LayeredLeft" 从左边开始按照层次排列 "LayeredTop" 从顶部开始按照层次排列 "NestedGrid" 在一个嵌套网格上排列
范例
打开所有单元 关闭所有单元基本范例 (2)
Table[PathGraph[Range[20], GraphLayout -> l, PlotLabel -> l], {l, {"CircularEmbedding", "SpiralEmbedding"}}]Table[GridGraph[{10, 10}, GraphLayout -> l, PlotLabel -> Style[l, 10]], {l, {"SpringEmbedding", "SpringElectricalEmbedding", "HighDimensionalEmbedding"}}]范围 (131)
基本用途 (3)
改变 Graph 的默认布局:
Graph[{12, 23, 34, 45, 56, 67, 78, 89, 910}]Graph[{12, 23, 34, 45, 56, 67, 78, 89, 910}, GraphLayout -> "DiscreteSpiralEmbedding"]Graph3D[{12, 13, 15, 24, 26, 34, 37, 48, 56, 57, 68, 78}]Graph3D[{12, 23, 34, 45, 56, 67, 78, 89, 910}, GraphLayout -> "DiscreteSpiralEmbedding"]TreeGraph[{12, 13, 14, 45}]TreeGraph[{12, 13, 14, 45}, GraphLayout -> "CircularEmbedding"]PathGraph[Range[20]]PathGraph[Range[20], GraphLayout -> "CircularEmbedding"]Graph[{12, 13, 14, 23, 24, 34}, GraphLayout -> "PlanarEmbedding"]Graph[{14, 15, 16, 24, 25, 26, 34, 35, 36}, GraphLayout -> "BipartiteEmbedding"]Graph[{13, 23, 24, 25, 34, 35}, GraphLayout -> "SpringEmbedding"]PetersenGraph[5, 1, GraphLayout -> "CircularEmbedding"]RandomGraph[{10, 20}, GraphLayout -> "CircularEmbedding"]AdjacencyGraph[{{0, 1, 0}, {0, 0, 1}, {1, 0, 0}}, GraphLayout -> "CircularEmbedding"]LineGraph[PetersenGraph[], GraphLayout -> "CircularEmbedding"]顶点布局 (116)
"BalloonEmbedding" (8)
Graph[Table[Floor[j / 12]j, {j, 1, 30}], GraphLayout -> "BalloonEmbedding"]"BalloonEmbedding" 对树图效果最好:
TreeGraph[RandomInteger[{1, #}]# + 1& /@ Range[30], GraphLayout -> "BalloonEmbedding"]使用选项 "EvenAngle"->True 把顶点均匀放在闭合圆圈内:
{KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "EvenAngle" -> True}],
KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "EvenAngle" -> False}]}设置 "OptimalOrder"->True 下,顶点排序优化了角度和高宽比:
{KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "OptimalOrder" -> True}],
KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "OptimalOrder" -> False}]}{KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "RootVertex" -> 1}],
KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "RootVertex" -> 2}]}KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "Rotation" -> 90Degree}]使用 "SectorAngles"->s 控制每个扇形的大小:
KaryTree[48, 5, GraphLayout -> {"BalloonEmbedding", "SectorAngles" -> {1 -> Pi / 2}}]RandomGraph[{10, 15}, GraphLayout -> "BalloonEmbedding"]"BipartiteEmbedding" (2)
Graph[Table[iMod[i + 1, 5], {i, 8}], GraphLayout -> "BipartiteEmbedding"]"BipartiteEmbedding" 仅适用于二分图:
CycleGraph[8, GraphLayout -> "BipartiteEmbedding"]"CircularEmbedding" (4)
Graph[Table[iMod[i + 1, 3], {i, 8}], GraphLayout -> "CircularEmbedding"]"CircularEmbedding" 最适合于循环图、LCF 符号嵌入和圈图:
CycleGraph[10, GraphLayout -> "CircularEmbedding"]CompleteGraph[7, GraphLayout -> {"CircularEmbedding", "Offset" -> #}]& /@ {Automatic, {30Degree, 30Degree}, {50Degree, 80Degree}}当设置为 "OptimalOrder"->True 时,顶点被重新排序,以使它们更好地分布在圆上:
edges = RandomSample[EdgeList[CycleGraph[20]], 20];
{Graph[edges, GraphLayout -> {"CircularEmbedding", "OptimalOrder" -> True}],
Graph[edges, GraphLayout -> {"CircularEmbedding", "OptimalOrder" -> False}]}"CircularMultipartiteEmbedding" (3)
Graph[Flatten[Table[ij, {i, 4}, {j, 5, 8}]], GraphLayout -> {"CircularMultipartiteEmbedding", "VertexPartition" -> {2, 3, 3}}]"CircularMultipartiteEmbedding" 最适合于 k-分图:
CompleteGraph[{2, 3, 2, 3}, GraphLayout -> {"CircularMultipartiteEmbedding", "VertexPartition" -> {2, 3, 2, 3}}]使用 "VertexPartition"->partition 指定顶点划分:
CompleteGraph[{3, 3, 2}, GraphLayout -> {"CircularMultipartiteEmbedding", "VertexPartition" -> {3, 3, 2}}]"DiscreteSpiralEmbedding" (3)
Graph[Table[ii + 1, {i, 11}], GraphLayout -> "DiscreteSpiralEmbedding"]"DiscreteSpiralEmbedding" 对路径图效果最好:
PathGraph[Range[30], GraphLayout -> "DiscreteSpiralEmbedding"]设置 "OptimalOrder"->True 下,对顶点重新排序,以使它们在离散螺旋线上的布局美观:
edges = RandomSample[EdgeList[PathGraph[Range[20]]], 19];
{Graph[edges, GraphLayout -> {"DiscreteSpiralEmbedding", "OptimalOrder" -> True}],
Graph[edges, GraphLayout -> {"DiscreteSpiralEmbedding", "OptimalOrder" -> False}]}"GravityEmbedding" (2)
以在每个顶点有一个电荷和一个质量且每条边对应于一个弹簧时能最小化机械能、电能和重力能的形式放置顶点:
Graph[Table[Floor[j / 12]j, {j, 1, 30}], GraphLayout -> "GravityEmbedding"]{KaryTree[48, 5, GraphLayout -> {"GravityEmbedding", "RootVertex" -> 1}],
KaryTree[48, 5, GraphLayout -> {"GravityEmbedding", "RootVertex" -> 2}]}"GridEmbedding" (3)
Graph[Table[iMod[i + 3, 8], {i, 15}], GraphLayout -> {"GridEmbedding", "Dimension" -> {4, 4}}]GridGraph[{10, 10}, GraphLayout -> {"GridEmbedding", "Dimension" -> {10, 10}}]GridGraph[{12, 12}, GraphLayout -> {"GridEmbedding", "Dimension" -> {12, 12}}]"HighDimensionalEmbedding" (3)
Graph[{12, 13, 15, 19, 24, 26, 210, 34, 37, 311, 48, 412, 56, 57, 513, 68, 614, 78, 715, 816, 910, 911, 913, 1012, 1014, 1112, 1115, 1216, 1314, 1315, 1416, 1516}, GraphLayout -> "HighDimensionalEmbedding"]"HighDimensionalEmbedding" 对大型图效果最好:
GridGraph[{50, 50}, GraphLayout -> "HighDimensionalEmbedding"]使用 "RandomSeed"->int 指定计算初始顶点位置的随机数生成器的种子:
edge = {13, 15, 17, 23, 26, 27, 28, 34, 38, 46, 58, 78};Graph[edge, GraphLayout -> {"HighDimensionalEmbedding", "RandomSeed" -> #}]& /@ {1, 50}"HyperbolicRadialEmbedding" (4)
KaryTree[30, GraphLayout -> "HyperbolicRadialEmbedding"]"HyperbolicRadialEmbedding" 最适合树状图:
TreeGraph[RandomInteger[{1, #}]# + 1& /@ Range[30], GraphLayout -> "HyperbolicRadialEmbedding"]KaryTree[60, 5, GraphLayout -> {"HyperbolicRadialEmbedding", "RootVertex" -> #}]& /@ {1, 2}KaryTree[60, 5, GraphLayout -> {"HyperbolicRadialEmbedding", "Rotation" -> 45Degree}]"HyperbolicSpringEmbedding" (10)
KaryTree[30, GraphLayout -> "HyperbolicSpringEmbedding"]"HyperbolicSpringEmbedding" 最适合树状图:
KaryTree[20, GraphLayout -> "HyperbolicSpringEmbedding"]采用设置 "EdgeWeighted"True 时,将使用边的权重:
edge = RandomInteger[#]# + 1& /@ Range[0, 10];
weight = RandomInteger[{1, 5}, 11];Graph[edge, EdgeWeight -> weight, GraphLayout -> {"HyperbolicSpringEmbedding", "EdgeWeighted" -> #}]& /@ {True, False}用选项 "EnergyControl"e 在最小化过程中指定系统总能量的限制:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, {GraphLayout -> {"HyperbolicSpringEmbedding", "EnergyControl" -> #}}]& /@ {Automatic, "Monotonic", "NonMonotonic"}用 "InferentialDistance"d 指定一个截止距离,超过该距离则假定顶点间的相互作用不存在:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "InferentialDistance" -> #}]& /@ {Automatic, .5, 2}用 "MaxIteration"it 来指定在尝试最小化能量时所采用的最大迭代次数:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "MaxIteration" -> #}]& /@ {Automatic, 1, 2}用 "RandomSeed"int 为计算初始顶点布局的随机数生成器指定种子:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "RandomSeed" -> #}]& /@ {1, 5}用 "StepControl"method 来定义怎样在能量最小化过程中调整步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "StepControl" -> #}]& /@ {Automatic, "Monotonic", "NonMonotonic", "StrictlyMonotonic"}用 "StepLength"r 指定移动顶点时的初始步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "StepLength" -> #}]& /@ {1, 4.5}用 "Tolerance"r 指定终止能量最小化过程的容差:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"HyperbolicSpringEmbedding", "Tolerance" -> #}]& /@ {Automatic, .5}"LayeredEmbedding" (7)
Graph[Table[iMod[i + 1, 5], {i, 12}], GraphLayout -> "LayeredEmbedding"]"LayeredEmbedding" 对树图效果最好:
TreeGraph[RandomInteger[{1, #}]# + 1& /@ Range[20], GraphLayout -> "LayeredEmbedding"]使用选项 "LayerSizeFunction"->func 指定相对高度:
KaryTree[10, 3, GraphLayout -> {"LayeredEmbedding", LayerSizeFunction -> (2&)}]{KaryTree[10, 3, GraphLayout -> {"LayeredEmbedding", "RootVertex" -> 1}],
KaryTree[10, 3, GraphLayout -> {"LayeredEmbedding", "RootVertex" -> 4}]}使用选项 "LeafDistance"->d 指定叶子距离:
{KaryTree[10, 3, GraphLayout -> {"LayeredEmbedding", "LeafDistance" -> 1}],
KaryTree[10, 3, GraphLayout -> {"LayeredEmbedding", "LeafDistance" -> 2}]}使用选项 "Orientation"->o 绘制具有不同方向的树:
Table[KaryTree[6, 3, GraphLayout -> {"LayeredEmbedding", "Orientation" -> o}], {o, {Top, Bottom, Left, Right}}]RandomGraph[{20, 30}, GraphLayout -> "LayeredEmbedding"]"LayeredDigraphEmbedding" (7)
Graph[{12, 13, 23, 14, 24, 15}, GraphLayout -> "LayeredDigraphEmbedding"]"LayeredDigraphEmbedding" 对有向无环图效果最好:
TreeGraph[RandomInteger[{1, #}]# + 1& /@ Range[20], GraphLayout -> "LayeredDigraphEmbedding"]Graph[{12, 13, 23, 14, 24, 15}, GraphLayout -> {"LayeredDigraphEmbedding", "RootVertex" -> #}]& /@ {1, 3}Table[Graph[{12, 13, 23, 14, 24, 15}, GraphLayout -> {"LayeredDigraphEmbedding", "Rotation" -> r Degree}], {r, {30, 60, 90, 120}}]使用选项 "Orientation"->o 绘制具有不同方向的树:
Table[Graph[{12, 13, 23, 14, 24, 15}, GraphLayout -> {"LayeredDigraphEmbedding", "Orientation" -> o}], {o, {Top, Bottom, Left, Right}}]使用选项 "VertexLayerPosition"->positions 指定层的位置:
Table[Graph[{12, 13, 23, 14, 24, 15}, GraphLayout -> {"LayeredDigraphEmbedding", "VertexLayerPosition" -> pos}], {pos, {{1, 3, 4, 5, 6}, {2, 1, 3, 4, 5}, {5, 4, 2, 1, 3}, {3, 6, 1, 2, 4}}}]RandomGraph[{20, 35}, GraphLayout -> "LayeredDigraphDrawing"]"LinearEmbedding" (2)
Graph[{12, 23, 34}, GraphLayout -> "LinearEmbedding"]使用选项 Method->m 指定算法:
Table[CompleteGraph[4, GraphLayout -> {"LinearEmbedding", Method -> m}], {m, {"Spectral", "SpectralOrdering", "TwoNormApproximation", "TwoNormApproximationOrdering"}}]"MultipartiteEmbedding" (3)
Graph[Flatten[Table[ij, {i, 3}, {j, 4, 8}]], GraphLayout -> {"MultipartiteEmbedding", "VertexPartition" -> {2, 1, 3, 2}}]"MultipartiteEmbedding" 最适合于 k-分图:
CompleteGraph[{4, 4, 4}, GraphLayout -> {"MultipartiteEmbedding", "VertexPartition" -> {4, 4, 4}}]使用 "VertexPartition"->partition 指定顶点划分:
CompleteGraph[{3, 2, 4}, GraphLayout -> {"MultipartiteEmbedding", "VertexPartition" -> {3, 2, 4}}]"PlanarEmbedding" (2)
Graph[{12, 13, 14, 23, 24, 34}, GraphLayout -> "PlanarEmbedding"]"PlanarEmbedding" 只适用于平面图:
HararyGraph[3, 5, GraphLayout -> "PlanarEmbedding"]"RadialEmbedding" (5)
Graph[Table[Floor[j / 7]j, {j, 1, 30}], GraphLayout -> "RadialEmbedding"]"RadialEmbedding" 对树图效果最好:
TreeGraph[RandomInteger[{1, #}]# + 1& /@ Range[30], GraphLayout -> "RadialEmbedding"]KaryTree[60, 5, GraphLayout -> {"RadialEmbedding", "RootVertex" -> #}]& /@ {1, 2}Table[KaryTree[60, 5, GraphLayout -> {"ComponentLayout" -> {"RadialEmbedding", "Rotation" -> r Degree}}], {r, {0, 30, 60, 90}}]RandomGraph[{20, 40}, GraphLayout -> "RadialEmbedding"]"RandomEmbedding" (1)
"SpectralEmbedding" (3)
Graph[{12, 13, 15, 19, 24, 26, 210, 34, 37, 311, 48, 412, 56, 57, 513, 68, 614, 78, 715, 816, 910, 911, 913, 1012, 1014, 1112, 1115, 1216, 1314, 1315, 1416, 1516}, GraphLayout -> "SpectralEmbedding"]"SpectralEmbedding" 最适合于结构良好的图:
HypercubeGraph[9, GraphLayout -> "SpectralEmbedding"]使用选项 "RelaxationFactor"->r 基于松弛拉普拉斯矩阵获取布局:
Table[GridGraph[{10, 10}, GraphLayout -> {"SpectralEmbedding", "RelaxationFactor" -> i}], {i, 0, 1, .3}]"SphericalEmbedding" (2)
Graph[{114, 115, 116, 25, 26, 213, 37, 314, 319, 48, 415, 420, 511, 519, 612, 620, 711, 716, 812, 816, 910, 914, 917, 1015, 1018, 1112, 1317, 1318, 1719, 1820}, GraphLayout -> "SphericalEmbedding"]"SphericalEmbedding" 对规则结构的图形效果最好:
Graph[GraphData[{"GeneralizedPetersen", {9, 2}}, "Edges"], GraphLayout -> "SphericalEmbedding"]"SpiralEmbedding" (3)
Graph[Table[iMod[i + 1, 20, 1], {i, 20}], GraphLayout -> "SpiralEmbedding"]"SpiralEmbedding" 对路径图效果最好:
PathGraph[Range[40], GraphLayout -> "SpiralEmbedding"]设置 "OptimalOrder"->True 下,对顶点重新排序,以使它们在螺旋线上布局美观:
Graph[Table[iMod[i + 1, 20, 1], {i, 20}], GraphLayout -> "SpiralEmbedding"]"SpringElectricalEmbedding" (15)
放置顶点,使得当每个顶点对应一个电子而每条边对应一条弹簧时,最小化它们的机械和电子能量:
Graph[{12, 13, 15, 19, 24, 26, 210, 34, 37, 311, 48, 412, 56, 57, 513, 68, 614, 78, 715, 816, 910, 911, 913, 1012, 1014, 1112, 1115, 1216, 1314, 1315, 1416, 1516}, GraphLayout -> "SpringElectricalEmbedding"]"SpringElectricalEmbedding" 对大多数图效果都最好:
KnightTourGraph[10, 10, GraphLayout -> "SpringElectricalEmbedding"]设置 "EdgeWeighted"->True 下,使用边权值:
edge = RandomInteger[#]# + 1& /@ Range[0, 10];
weight = RandomInteger[{1, 5}, 11];Graph[edge, EdgeWeight -> weight, GraphLayout -> {"SpringElectricalEmbedding", "EdgeWeighted" -> #}]& /@ {True, False}使用选项 "EnergyControl"->e 指定在最小化过程中系统总能量的限制:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, {GraphLayout -> {"SpringElectricalEmbedding", "EnergyControl" -> #, "StepControl" -> "Monotonic"}}]& /@ {Automatic, "Monotonic", "NonMonotonic"}使用 "InferentialDistance"->d 指定假设顶点之间不存在交互作用的截止距离:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "InferentialDistance" -> #}]& /@ {Automatic, .1, .5}使用 "MaxIteration"->it 指定在尝试最小化能量的过程中所使用的最大迭代次数:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "MaxIteration" -> #}]& /@ {Automatic, 1, 2}使用 "Multilevel"->method 指定在图的粗化的递归过程中所使用的方法:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "Multilevel" -> #}]& /@ {Automatic, None, "MaximalIndependentVertexSet", "MaximalIndependentVertexSetRugeStuben", "MaximalIndependentVertexSetInjection", "MaximalIndependentVertexSetRugeStubenInjection", "MaximalIndependentEdgeSetHeavyEdge", "MaximalIndependentEdgeSet", "MaximalIndependentEdgeSetSmallestVertexWeight", "Hybrid"}设置 "Octree"->True 下,使用八叉树的数据结构(三维情形)或四叉树的数据结构(二维情形)计算排斥力:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "Octree" -> #}]& /@ {True, False}使用 "RandomSeed"->int 指定计算初始顶点位置的随机数生成器的种子:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "RandomSeed" -> #}]& /@ {1, 5}使用 "RepulsiveForcePower"->r 控制斥力随着距离衰减的有多快:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "RepulsiveForcePower" -> #}]& /@ {-1, -2.5}edge = RandomInteger[#]# + 1& /@ Range[0, 50];Graph[edge, {GraphLayout -> {"SpringElectricalEmbedding", "Rotation" -> #}}]& /@ {0, 90Degree}edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "SpringConstant" -> #}]& /@ {1, 4.5, 8}使用 "StepControl"->method 定义在能量最小化过程中如何修改步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "StepControl" -> #}]& /@ {Automatic, "Monotonic", "NonMonotonic", "StrictlyMonotonic"}使用 "StepLength"->r 指定移动顶点所使用的初始步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "StepLength" -> #}]& /@ {1, 4.5}使用 "Tolerance"->r 指定用于终止能量最小化过程中所使用的容差:
edge = RandomInteger[#]# + 1& /@ Range[0, 20];Graph[edge, GraphLayout -> {"SpringElectricalEmbedding", "Tolerance" -> #}]& /@ {Automatic, .5}"SpringEmbedding" (12)
放置顶点,以使得当每个边对应于一个弹簧时,最小化它们的机械能量:
Graph[{114, 115, 116, 25, 26, 213, 37, 314, 319, 48, 415, 420, 511, 519, 612, 620, 711, 716, 812, 816, 910, 914, 917, 1015, 1018, 1112, 1317, 1318, 1719, 1820}, GraphLayout -> "SpringEmbedding"]"SpringEmbedding" 对规则结构化图效果最好:
Graph[GraphData[{"GeneralizedPetersen", {9, 2}}, "EdgeRules"], GraphLayout -> "SpringEmbedding"]设置 "EdgeWeighted"->True 下,使用边权值:
edge = RandomInteger[#]# + 1& /@ Range[0, 10];
weight = RandomInteger[{1, 5}, 11];Graph[edge, EdgeWeight -> weight, GraphLayout -> {"SpringEmbedding", "EdgeWeighted" -> #}]& /@ {True, False}使用选项 "EnergyControl"->e 指定在最小化过程中系统总能量的限制:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, {GraphLayout -> {"SpringEmbedding", "EnergyControl" -> #}}]& /@ {Automatic, "Monotonic", "NonMonotonic"}使用 "InferentialDistance"->d 指定假定顶点之间不存在交互作用的截止距离:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "InferentialDistance" -> #}]& /@ {Automatic, .5, 2}使用 "MaxIteration"->it 指定在尝试最小化能量的过程中使用的最大迭代次数:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "MaxIteration" -> #}]& /@ {Automatic, 1, 2}使用 "Multilevel"->method 指定在图的粗化递归过程中使用的方法:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "Multilevel" -> #}]& /@ {Automatic, None, "MaximalIndependentVertexSet", "MaximalIndependentVertexSetRugeStuben", "MaximalIndependentVertexSetInjection", "MaximalIndependentVertexSetRugeStubenInjection", "MaximalIndependentEdgeSetHeavyEdge", "MaximalIndependentEdgeSet", "MaximalIndependentEdgeSetSmallestVertexWeight", "Hybrid"}使用 "RandomSeed"->int 指定计算初始顶点位置的随机数生成器的种子:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "RandomSeed" -> #}]& /@ {1, 5}edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, {GraphLayout -> {"SpringEmbedding", "Rotation" -> #}}]& /@ {0, 90Degree}使用 "StepControl"->method 顶点在能量最小化过程中如何修改步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "StepControl" -> #}]& /@ {Automatic, "Monotonic", "NonMonotonic", "StrictlyMonotonic"}使用 "StepLength"->r 指定用于移动顶点的初始步长:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "StepLength" -> #}]& /@ {1, 4.5}使用 "Tolerance"->r 指定用于终止能量最小化过程的容差:
edge = RandomInteger[#]# + 1& /@ Range[0, 30];Graph[edge, GraphLayout -> {"SpringEmbedding", "Tolerance" -> #}]& /@ {Automatic, .5}"StarEmbedding" (4)
Graph[Table[1i, {i, 2, 6}], GraphLayout -> "StarEmbedding"]"StarEmbedding" 对星状图效果最好:
{StarGraph[12, GraphLayout -> "StarEmbedding"], WheelGraph[12, GraphLayout -> "StarEmbedding"]}StarGraph[15, GraphLayout -> {"StarEmbedding", "Offset" -> #}]& /@ {Automatic, {30Degree, 30Degree}, {50Degree, 80Degree}}StarGraph[15, GraphLayout -> {"StarEmbedding", "Center" -> #}]& /@ {Automatic, 10}"SymmetricLayeredEmbedding" (4)
Graph[{12, 13, 14, 25, 35, 45}, GraphLayout -> "SymmetricLayeredEmbedding"]"SymmetricLayeredEmbedding" 最适合对称有向无环图:
NestGraph[{f[#], g[#]}&, x, 3, GraphLayout -> "SymmetricLayeredEmbedding"]Table[Graph[{12, 13, 14, 25, 35, 45}, GraphLayout -> {"SymmetricLayeredEmbedding", "Rotation" -> r Degree}], {r, {30, 60, 90, 120}}]RandomGraph[{20, 35}, GraphLayout -> "SymmetricLayeredEmbedding"]"TutteEmbedding" (2)
Graph[{12, 13, 14, 23, 24, 34}, GraphLayout -> "TutteEmbedding"]"TutteEmbedding" 仅适用于3-连通平面图:
Graph[GraphData[{"JohnsonSkeleton", 77}, "EdgeList"], GraphLayout -> "TutteEmbedding"]边的布局 (3)
"DividedEdgeBundling" (1)
"HierarchicalEdgeBundling" (1)
封装布局 (6)
"ClosestPacking" (1)
"ClosestPackingCenter" (1)
"Layered" (1)
"LayeredLeft" (1)
"LayeredTop" (1)
渲染顺序 (3)
"VertexFirst" (1)
"EdgeFirst" (1)
应用 (2)
files = Flatten[Rest[NestList[Union[Flatten[Thread[# -> FileNames["*", #]]& /@ Last /@ #]]&, {"" -> $InstallationDirectory}, 2]]];Graph[files, GraphLayout -> "BalloonEmbedding"]systems = {"5th Edition""6th Edition", "5th Edition""PWB 1.0", "6th Edition""1 BSD", "6th Edition""Interdata", "6th Edition""LSX", "6th Edition""Mini Unix", "6th Edition""Wollongong", "PWB 1.0""PWB 1.2", "PWB 1.0""USG 1.0", "1 BSD""2 BSD", "Interdata""PWB 2.0", "Interdata""Unix/TS 3.0", "Interdata""7th Edition", "PWB 1.2""PWB 2.0", "USG 1.0""USG 2.0", "USG 1.0""CB Unix 1", "7th Edition""2 BSD", "7th Edition""32V", "7th Edition""Xenix", "7th Edition""Ultrix-11", "7th Edition""UniPlus+", "7th Edition""V7M", "PWB 2.0""Unix/TS 3.0", "USG 2.0""USG 3.0", "CB Unix 1""CB Unix 2", "32V""3 BSD", "Unix/TS 1.0""Unix/TS 3.0", "USG 3.0""Unix/TS 3.0", "CB Unix 2""CB Unix 3", "3 BSD""4 BSD", "V7M""Ultrix-11", "Unix/TS 3.0""TS 4.0", "CB Unix 3""Unix/TS++", "CB Unix 3""PDP-11 Sys V", "4 BSD""4.1 BSD", "Unix/TS++""TS 4.0", "4.1 BSD""8th Edition", "4.1 BSD""4.2 BSD", "4.1 BSD""2.8 BSD", "2 BSD""2.8 BSD", "TS 4.0""System V.0", "4.2 BSD""4.3 BSD", "4.2 BSD""Ultrix-32", "2.8 BSD""2.9 BSD", "2.8 BSD""Ultrix-11", "System V.0""System V.2", "8th Edition""9th Edition", "System V.2""System V.3"};Graph[systems, VertexShapeFunction -> "Square", VertexSize -> {.5, .2}, VertexLabels -> Placed["Name", Center], VertexStyle -> Hue[0.125, 0.7, 0.9], VertexLabelStyle -> Directive[FontFamily -> "Arial", 8], ImageSize -> 480, EdgeShapeFunction -> ({Arrowheads[{{.02, .6}}], Arrow[#]}&)]属性和关系 (6)
GraphLayout 可用于普通图:
{Graph[{12, 23, 31}, GraphLayout -> "SpringEmbedding"], PathGraph[Range[10], GraphLayout -> "SpringEmbedding"]}AdjacencyGraph[{{0, 1, 0}, {0, 0, 1}, {1, 0, 0}}, GraphLayout -> "SpringEmbedding"]{PetersenGraph[5, 2, GraphLayout -> "SpringEmbedding"], GridGraph[{5, 5}, GraphLayout -> "SpringEmbedding"]}RandomGraph[UniformGraphDistribution[50, 100], GraphLayout -> "CircularEmbedding"]VertexCoordinates 会覆盖 GraphLayout 坐标:
{Graph[{12, 23, 31}, GraphLayout -> "SpringElectricalEmbedding"],
Graph[{12, 23, 31}, GraphLayout -> "SpringElectricalEmbedding", VertexCoordinates -> Table[{i, i}, {i, 0, 2}]]}利用 AbsoluteOptions 来提取通过布局算法计算所得的 VertexCoordinates:
Graph[{12, 23, 31}]AbsoluteOptions[%, VertexCoordinates]相关指南
-
▪
- 图的样式、标记和布局 ▪
- 图的可视化 ▪
- 图的属性 ▪
- 图注解 ▪
- 图与网络
文本
Wolfram Research (2010),GraphLayout,Wolfram 语言函数,https://reference.wolfram.com/language/ref/GraphLayout.html (更新于 2025 年).
CMS
Wolfram 语言. 2010. "GraphLayout." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2025. https://reference.wolfram.com/language/ref/GraphLayout.html.
APA
Wolfram 语言. (2010). GraphLayout. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/GraphLayout.html 年
BibTeX
@misc{reference.wolfram_2026_graphlayout, author="Wolfram Research", title="{GraphLayout}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/GraphLayout.html}", note=[Accessed: 08-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_graphlayout, organization={Wolfram Research}, title={GraphLayout}, year={2025}, url={https://reference.wolfram.com/language/ref/GraphLayout.html}, note=[Accessed: 08-September-2026]}