以下是在 MMA 8.0 中更改图形的两种基本方法。第一个依赖于HighlightGraph
,尤其是依赖于GraphHighlightStyle -> "DehighlightHide"
. 第二种方法在该图的未来变体中使用该图的顶点坐标。
我们将分别讨论删除和添加,因为它们涉及的方法略有不同。
[PS:我对我的答案进行了几处编辑,以使其更清晰。]
首先是一些数据:
edges={1\[UndirectedEdge]8,1\[UndirectedEdge]11,1\[UndirectedEdge]18,1\[UndirectedEdge]19,1\[UndirectedEdge]21,1\[UndirectedEdge]25,1\[UndirectedEdge]26,1\[UndirectedEdge]34,1\[UndirectedEdge]37,1\[UndirectedEdge]38,4\[UndirectedEdge]11,4\[UndirectedEdge]12,4\[UndirectedEdge]26,4\[UndirectedEdge]27,4\[UndirectedEdge]47,4\[UndirectedEdge]56,4\[UndirectedEdge]57,4\[UndirectedEdge]96,4\[UndirectedEdge]117,5\[UndirectedEdge]11,5\[UndirectedEdge]18,7\[UndirectedEdge]21,7\[UndirectedEdge]25,7\[UndirectedEdge]34,7\[UndirectedEdge]55,7\[UndirectedEdge]76,8\[UndirectedEdge]11,26\[UndirectedEdge]29,26\[UndirectedEdge]49,26\[UndirectedEdge]52,26\[UndirectedEdge]111,27\[UndirectedEdge]28,27\[UndirectedEdge]51,42\[UndirectedEdge]47,49\[UndirectedEdge]97,51\[UndirectedEdge]96}
这是初始图表:
g = Graph[edges, VertexLabels -> "Name", ImagePadding -> 10,
ImageSize -> 500]
![图。1](https://i.stack.imgur.com/aiPyV.png)
“删除”图形边缘而不改变图形的整体外观。
让我们开始移除位于图形中心的边 (4,11)。remainingEdgesAndVertices
包含除边 (4,11) 之外的所有顶点和初始边。
remainingEdgesAndVertices =
Join[VertexList[g], Complement[EdgeList[g], {4 \[UndirectedEdge] 11}]]
让我们“删除”(即隐藏)边缘(4,11):
HighlightGraph[g, remainingEdgesAndVertices, VertexLabels -> "Name",
ImagePadding -> 10, GraphHighlightStyle -> "DehighlightHide",
ImageSize -> 500]
![图2](https://i.stack.imgur.com/7SxfL.png)
如果我们实际上删除了边 (4, 11),则该图将彻底改变其外观。
Graph[Complement[edges, {4 \[UndirectedEdge] 11}],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
![图3](https://i.stack.imgur.com/05YpW.png)
“添加”图形边缘而不改变图形的整体外观。
添加图形边缘稍微更具挑战性。有两种方法浮现在脑海。此处使用的方法向后工作。您首先以隐藏形式包含新边缘,然后再将其发现。具有隐藏的“待添加”边的初始图形的布局将类似于具有“新”边的图形的布局。原因是:它们实际上是同一张图:但是它们显示的边数不同。
g2 = Graph[Append[edges, 42 \[UndirectedEdge] 37],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
HighlightGraph[g2,
Join[Complement[EdgeList[g2], {42 \[UndirectedEdge] 37}],
VertexList[g2]], VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide"]
![图4](https://i.stack.imgur.com/VuGDF.png)
现在显示添加了“新边”的图形。
![图](https://i.stack.imgur.com/LKosN.png)
这看起来与图 1 非常不同。但它似乎是图 4 的自然延伸。
即时添加新的顶点和边
还有另一种方法可以在保持整体外观的同时添加边(和顶点)。它的灵感来自 Sjoerd 在他的回复中所写的内容。
让我们为未来的顶点 99 保留点 {0,0}。我们只需将该点添加到 VertexCoordinates
from g2:
vc = VertexCoordinates ->
Append[AbsoluteOptions[g2, VertexCoordinates][[2]], {0, 0}]
现在让我们看看它是什么样子的。g3 只是带有附加顶点 (999) 和边 (4,99) 的 g2。
g3 = Graph[Append[EdgeList [g2], 4 \[UndirectedEdge] 999], vc,
VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide", ImageSize -> 500]
![图6](https://i.stack.imgur.com/MMHWI.png)
这个过程允许我们在前进时添加新的边和顶点。但是需要一些试验和错误来确保新顶点位于合适的位置。
仅添加另一条边(没有新顶点)要容易得多:只需添加新边并使用VertexCoordinates
先前图中的 。
您应该能够使用相同的方法(使用 same VertexCoordinates
)从图中删除边。