graph - Mathematica 8 中的多重图

标签 graph wolfram-mathematica

我刚刚花了几个小时尝试转换some old code它使用 Mathematica 7 的 GraphPlot 来使用新的 Mathematica 8 图形函数。这似乎是明智的,因为新的图形绘制更好,并且它具有诸如 AdjacencyMatrixKirchhoffMatrix 之类的东西。内置。

问题是我无法弄清楚如何让具有多条边的图在 Mma 8 中工作。

我用作典型示例的费曼图是双环真空图

GraphPlot[{1 -> 2, 1 -> 2, 1 -> 2}, MultiedgeStyle -> .5, 
          DirectedEdges -> True, VertexCoordinateRules -> {{-1, 0}, {1, 0}}]

two-loop vacuum sunset graph

尝试在 Mma 8 中制作类似的图表

Graph[{DirectedEdge[1, 2], DirectedEdge[1, 2], DirectedEdge[1, 2]}, 
      VertexCoordinates -> {{-1, 0}, {1, 0}}]

产生错误消息

Graph::supp: Mixed graphs and multigraphs are not supported. >>

如何使用 Mathematica 8 的 Graph[] 对象构建(并使用)类似的图表?

编辑:这个问题在 Mathematica 9 中仍然存在

最佳答案

我经历了类似的尝试使用Graph的过程对于一切,发现它并不能取代 CombinatoricaGraphPlotGraph的最佳用途就是用它作为容器类型来存储顶点+边+坐标。

例如Combinatorica的《算法图论》中的大部分函数新手教程不可用 Graph对象。当我在 Graph 上与 WRI 开发人员交谈时项目,我的理解是提供所有 Combinatorica Graph 的功能不是优先事项,因为设计目标是提供以与算法无关的方式解决任务的方法。例如,您可能有方法找到新的 Graph 的顶点覆盖和图形着色。对象,但对于 Brelaz 着色和贪婪顶点覆盖等算法特定任务,您可能始终必须遵循 Combinatorica .

除了多图表之外,某些图表布局不适用于 Graph对象。您不能修复某些顶点坐标并让自动布局完成其余的工作。另外,LayeredGraphPlot的布局不可用,有时是 preferred超过GraphLayeredDrawing .

充分利用 3 个世界的方法是使用 Graph对象作为图形存储的主要工具并为 GraphPlot 制作包装器, CombinatoricaGraphUtilities接受 Graph 的函数对象

一些用例:

  • 您需要 Combinatorica 中的一些算法或GraphUtilities -- 制作包装器 someAlgorithm这需要 Graph对象,将其转换为边列表或 Combinatorica图( GraphUtilities'ToCombinatoricaGraph 很有帮助),运行算法,将其转换回 Graph对象,注意设置正确 GraphStyleVertexCoordinates来自原始图形对象。由于冲突,请确保CombinatoricaGraphUtilities不在上下文路径上,我 do it使用 $Pre

  • 您需要一些自定义图表,例如 here ,或者多边图——制作一个包装函数someGraphPlot接受 Graph对象,将其转换为正确的表示形式,然后使用 GraphPlot或者也许创建一个临时的 Graph出于这一目的,具有自定义顶点/边缘形状的对象。请注意,您可以使用 SetProperty 将属性附加到边缘。这样您就可以将多重图存储在 Graph 中就这样。

  • 您想使用 GraphPlot 之一布局和存储坐标 Graph -- 使用类似 here 的函数从 GraphPlot 获取顶点坐标布局,并将它们存储在Graph中对象使用 VertexCoordinates

这是一个notebook演示这些用例和其他一些用例

关于graph - Mathematica 8 中的多重图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485405/

相关文章:

algorithm - GCJ - 哈密顿循环

用于(简单)无向图的 Python 库/模块

c++ - 图组件之间的路径算法

wolfram-mathematica - 在Mathematica中实现四叉树

list - Mathematica - 初始化变量列表

iphone - Core Plot 图高度未填满托管 View

python - 了解 Mathematica 轮廓线提取

wolfram-mathematica - 如何停止在 Format/Interpretation Mathematica 结构中发生递归?

wolfram-mathematica - Mathematica 中的二次规划

python - 更新 PyPlot 中的图像