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

ShowGraph[{e1,e2},{e1,e3},{e1,e2,e3}];//这里有什么问题?,graph,wolfram-mathematica,Graph,Wolfram Mathematica,在Mathematica图论软件包“Combinatica”中不显示指定的图。如果您想要一个具有3个顶点且边位于顶点1和顶点2之间以及顶点1和顶点3之间的通用无向图,请执行以下操作: Needs["Combinatorica`"] ShowGraph@AddEdges[EmptyGraph[3], {{1, 2}, {1, 3}}] 有关生成、显示和分析图形的更多信息,请跳到 在Mathematica中表示图形 .需要注意的一点是Mathematica有两个或多或少独立的绘图框架:Combin

在Mathematica图论软件包“Combinatica”中不显示指定的图。

如果您想要一个具有3个顶点且边位于顶点1和顶点2之间以及顶点1和顶点3之间的通用无向图,请执行以下操作:

Needs["Combinatorica`"]
ShowGraph@AddEdges[EmptyGraph[3], {{1, 2}, {1, 3}}]
有关生成、显示和分析图形的更多信息,请跳到 在Mathematica中表示图形
.

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

我以我有限的经验,Combinatica软件包是一台相当大的机器,要想投入使用,你真的需要摸索一下框架。 另一方面,图形是非常直观的,有更多的图形定制选项和更多的Mathematica感觉

要绘制示例图,只需

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

好的,谢谢大家。让我结束所有这些讨论。首先,正如Janus提到的,在Mathematica中有两种绘制图形的方法。首先是Combinatica方式,它是一个附加模块。其次,GraphPlot方法是一种原生的Mathematica实现,用于绘制图形。GraphPlot使用Spring布局绘制图形。正如dreeves所说,我们使用ShowGraph[]以组合方式绘制图形

要理解上述代码为什么不起作用,我们必须非常了解ShowGraph[]命令。Mathematica 7定义

ShowGraph[g]显示图形g

现在,什么是图形

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

问题是Combinatica似乎并没有按照上面定义的方式工作。让我们检查一下。。。假设您已经创建了一个名为g的组合图。现在g[[0]]将打印图形,g[[1]]将打印边列表,g[[2]]将打印选项。顶点列表在哪里

如上所示,您可以手动创建g[[1]]和g[[2]]并将其馈送到Graph。让我们创建它:

e = {{1,2}, {{1,3}}}
opts = {{{0,0}}, {{-5,5}}, {{5,5}}}
g = Graph[e, opts]
这将创建顶点为1、2和3的图形。现在,你如何给它们贴上标签?在Combinatica中,可以使用ShowGraph[]的VertexLabel选项来执行此操作。如果使用VertexLabel->True,它将只显示默认标签,即1、2和3。要使用自己的标签,请执行以下操作:

ShowGraph[g, VertexLabel->{a,b,c}]
很有趣,对吧

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

请记住,尽管有可能,但它只对创建小图形有用。对于较大的图形,应使用默认图形生成器创建图形。例如,对于随机图使用:

g = Random[10, 0.23]
将创建一个包含10个顶点的图,边概率为0.23

哇,哇, 这是Combinatica的时间

ShowGraph[
 Graph[
 {{{1, 2}}, {{2, 3}}, {{3, 1}}}, 
 {{{0, 0}, VertexLabel -> v1}, 
  {{2, 5}, VertexLabel -> v2}, 
  {{5, 5}, VertexLabel -> v3}}
 ]
]
我想以上就是你想要的

Combinatica创建图形对象的方式似乎非常麻烦。我认为创建一个中介函数更容易,它将生成Graph对象,语法与GraphPlot类似。这样,您就不必显式地写出顶点坐标,也不必使用麻烦的{x,y},opts}表示法,当您没有要指定的opts时,它将变成{x,y}

因此,您可以使用如下函数:

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

在顶部生成代码。

说什么?我们需要更多的细节,代码示例,解释,编程平台/语言。。。这实际上是一个关于StackOverflow的很好的问题,尽管它可以更清楚,也许可以把代码放在问题主体而不是标题中。需要对Mathematica文档进行大量的挖掘,才能显示hello world样式的图形。@TheMachineCharmer:ShowGraph[]@RockingTheSixstring:让我再赢得一个声誉,然后我可以在上面添加一个信息图像this@Sazzad你问了七个问题却从未接受过答案。。。试着改进它!Combinatica教程说,“一个图被定义为一组具有一组边的顶点,其中一条边被定义为一对顶点。”让我上传一张图片来澄清这一点。你能告诉我为什么以下不起作用吗:g=EmptyGraph[3];g=加法[{1,2},{1,3}];ShowGraph[g]@Sazzad它不起作用,因为AddEdges语法是错误的。Try..g=EmptyGraph[3];g=加法[g,{1,2},{1,3}];在Mathematica 5中不起作用。可能是Mathematica 7.+1的一个新补充,指出还有一个图形绘制包:GraphUtilities。但它似乎是自动加载的。不需要需要[GraphUtilities`]?