未在Mathematica图形理论包'Combinatorica'中显示指定的图形。
答案 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]]
会打印Graph
,g[[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,答案 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}]
在顶部产生代码。