5

我想创建一个图(图论),其中某些边缘与其他边缘具有不同的颜色,这将用于突出显示图中从一个顶点到另一个顶点的路径。

以下是一些具有不同颜色边缘的示例http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/http://demonstrations.wolfram.com/Ramsey336/。我查看了这些的源代码,但这些解决方案似乎很复杂。我需要一个简单的例子来工作。我认为我需要使用 EdgeRenderingFunction 作为GraphPlot.

此外,在“更多信息”部分的EdgeRenderingFunction文档下,它说:

数学图形

这看起来很有用,但不幸的是没有可以尝试的编码示例。

从字面上看,我尝试了类似的事情

GraphPlot[{1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, VertexLabeling -> True,
EdgeRenderingFunction -> g[{ 1, 2}, {1, 2}, 红色]]

但这行不通。这将需要比这更聪明的东西。

4

2 回答 2

6

这是一个示例,说明如何通过图形自动突出显示特定路径。

这是一个由边缘规则列表指定的愚蠢图:

edges = Table[i -> Mod[1 + i^2, 10], {i, 0, 9}];
GraphPlot[edges, VertexLabeling -> True]

数学图形

这是我们想要突出显示的图表的路径。

path = {0, 1, 2, 5, 6, 7, 0};

让我们将路径划分为边缘,考虑到我们想要突出边缘独立于其方向的事实。

edgesToHighlight = Partition[path, 2, 1];
edgesToHighlight = Join[edgesToHighlight,
    Reverse /@ edgesToHighlight];

我们编写一个EdgeRenderingFunction以两种样式之一呈现边缘的方法,这取决于它是否在我们的列表中。

erf[pts_, edge_, ___] := If[MemberQ[edgesToHighlight, edge],
    {Thick, Black, Arrow[pts, 0.1]}, {Darker[Red], Line[pts]}];

最后,我们显示结果。

GraphPlot[edges, EdgeRenderingFunction -> erf,
    VertexLabeling -> True]

数学图形

于 2010-10-10T00:53:09.980 回答
1
GraphPlot[
 {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, 
 VertexLabeling -> True, 
 EdgeRenderingFunction -> (
    {If[#2 == {1, 2}, Red, Black], 
     Line[#1]}
  &)
]

数学图形

渲染函数是一个回调函数,它接受 3 个参数。第一个是线的坐标列表,第二个是边的顶点,第三个是边的标签。

在 Mathematica 中,您可以使用(f[#1,#2,#3,...] &).

于 2010-10-09T19:22:09.217 回答