ShowGraph [{{e1,e2},{e1,e3}},{e1,e2,e3}]; // 这里有什么问题?

时间:2010-05-31 06:24:28

标签: graph wolfram-mathematica

未在Mathematica图形理论包'Combinatorica'中显示指定的图形。

4 个答案:

答案 0 :(得分:4)

需要注意的一点是,Mathematica有两个或多或少独立的图形框架:Combinatorica包和GraphUtilities包中包含的框架。

我的经验有限,Combinatorica软件包是一个非常大的机器,可以实现行动,你真的需要让框架使用它。 另一方面,GraphUtilities非常直观,有更多的图形自定义选项,更多的是Mathematica的感觉。

要绘制示例图表,您只需要

Needs["GraphUtilities`"]
GraphPlot[{e1 -> e2, e1 -> e3}, VertexLabeling -> True, DirectedEdges -> True]

答案 1 :(得分:3)

如果你想要一个带有3个顶点的通用无向图,其顶点在顶点1和顶点2之间以及顶点1和顶点3之间,那么下面将会这样做:

Needs["Combinatorica`"]
ShowGraph@AddEdges[EmptyGraph[3], {{1, 2}, {1, 3}}]

有关生成,显示和分析图表的更多信息,请跳至 Mathematica中的“表示图” Combinatorica Tutorial

答案 2 :(得分:1)

好的,谢谢大家。让我收拾所有这些讨论。首先,正如Janus所提到的,有两种方法可以在Mathematica中绘制图形。首先,Combinatorica方式,作为一个补充。其次,GraphPlot方式是一个原生的Mathematica实现绘制图形。 GraphPlot使用Spring布局绘制图形。正如dreeves所说,我们使用ShowGraph []以Combinatorica方式绘制图形。

要理解为什么提到的代码不起作用,我们必须非常好地理解ShowGraph []命令。 Mathematica 7定义,

  

ShowGraph [g]显示图g。

现在,图是什么?

  

图[e,v,opts]代表一个图形对象,其中 e 是用图形选项注释的边列表, v 是用图形注释的顶点列表选项, opts 是一组全局图选项“

问题是Combinatorica似乎没有完全按照上面定义的方式工作。让我们来看看...假设你已经创建了一个名为 g 的Combinatorica图。现在g[[0]]会打印Graphg[[1]]会打印边缘列表,g[[2]]会打印选项。顶点列表在哪里?

如上所示,您可以手动创建g[[1]]g[[2]]并将其反馈给图表。让我们创建它:

e = {{1,2}, {{1,3}}}
opts = {{{0,0}}, {{-5,5}}, {{5,5}}}
g = Graph[e, opts]

这将创建一个顶点为1,2和3的图形。现在,您如何标记它们?在Combinatorica中,您可以使用ShowGraph []的VertexLabel选项执行此操作。如果您使用VertexLabel-> True,它将仅显示默认标签,即此处为1,2和3。要使用您自己的标签,请执行以下操作:

ShowGraph[g, VertexLabel->{a,b,c}]

有意思,对吧? :)

现在回答我的问题。提到的代码的问题是由于使用了文字值而不是整数。 Combinatorica仅将整数值排除在边或顶点列表之外。

请记住,虽然它可能只对创建小图表有用。对于较大的图形,您应该使用默认图形生成器来创建图形。比如,对于随机图使用:

g = Random[10, 0.23]

将创建一个包含10个顶点的图形,边缘概率为0.23。

Waka,waka,
这次是Combinatorica!

答案 3 :(得分:0)

ShowGraph[
 Graph[
 {{{1, 2}}, {{2, 3}}, {{3, 1}}}, 
 {{{0, 0}, VertexLabel -> v1}, 
  {{2, 5}, VertexLabel -> v2}, 
  {{5, 5}, VertexLabel -> v3}}
 ]
]

我认为上述内容正是您所寻找的。

Combinatorica创建Graph对象的方式看起来非常麻烦。我认为创建一个中间函数会更容易,它会生成Graph对象,其语法与GraphPlot类似。这样你就不必明确写出顶点坐标,也不必使用繁琐的{{x,y},opts}表示法,当你没有opts指定时,它会变成{{x,y}}。

所以,你可以有一个函数,如:

myGraphPlot[{{e1,e2},{e1,e3}},{e1,e2,e3}]

在顶部产生代码。