Combinatorica
冲突,有没有一种方法可以强制Mathematica使用该函数的内置版本?换句话说,在我导入了Combinatorica版本的CompleteGraph
的Needs["Combinatorica"]
之后,是否有办法访问内置的CompleteGraph
? 为了澄清1,图上的上下文菜单使您可以更改GraphStyle和GraphLayout,我希望能够以编程方式进行更改。这是我发现更改Graph对象的GraphStyle的一种方法
g = GridGraph[{4, 4}];
BooleanGraph[Or, g, g, GraphStyle -> "DiagramBlack"]
但是,这忘记了原始图的选项,例如
VertexCoordinates
在网格图上尝试布雷特的食谱
g = GridGraph[{3, 2}, ImageSize -> Tiny]
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g];
Graph[EdgeList[g], GraphStyle -> "BasicGold",
VertexCoordinates -> coords, ImageSize -> Tiny]
(来源:yaroslavvb.com)
Mathematica如何在图形操作中处理图形坐标似乎存在一个错误。第一行置换坐标,第二行给出内部警告,可能与坐标有关。为每个顶点使用非整数顶点和显式坐标无济于事。一种解决方案是全局存储坐标,并具有
fixCoordinates
函数,以便在修改后将正确的坐标重新分配给Graph
VertexDelete[GridGraph[{3, 3}], 1]
NeighborhoodGraph[VertexDelete[GridGraph[{3, 3}], 1], 2]
最佳答案
新的Graph对象在Mathematica 8中是原子的。因此,像字符串或图像一样,它们不具有可以以常规方式操作的内部结构。特别不寻常的是,新对象具有一个FullForm,看起来像可以对其进行符号操作。但是外观可能具有欺骗性-不仅是模式匹配无法访问的表示形式,而且如果使用复制粘贴将其反馈回Mathematica,它甚至不是有效的图形规范。
我发现了一些可以用来操纵图形结构的技巧。第一种尝试使用“官方” channel 提取图的属性:
adjustedGraph[g_, newOptions___] :=
Graph[
VertexList@g,
EdgeList@g,
newOptions,
Sequence@@Table[p -> PropertyValue[g, p], {p, PropertyList[g]}]
]
您可以像下面这样使用此功能:
g = GridGraph[{4, 4}, GraphStyle -> "DiagramBlack", ImageSize -> Tiny]
adjustedGraph[g, GraphStyle -> "BasicGold"]
此函数使用VertexList,EdgeList和PropertyValue提取图形属性。不幸的是,某些选项无法通过这种方式恢复。例如,使用此方法将丢失图形选项ImageSize。
甚至更令人发指的黑客利用了FullForm的伪符号表示形式:
adjustedGraph2[g_, newOptions___] :=
"Hold@" ~~ ToString[g, InputForm] //
ToExpression //
#[[1, 3]] & //
Graph[VertexList@g, EdgeList@g, newOptions, Sequence @@ #] &
尽管它具有邪恶的性质,但第二个函数似乎保留了大多数图形选项,因此其执行效果更令人满意。我说“最”,因为我还没有尝试过更深奥的选择,例如包装后的包装,形状函数和图形属性。无法保证在Wolfram更改图形对象的表示形式时该方法将保持不变(甚至现在也不能用于所有可能的图形定义)。
应该有一种没有黑客的方法来实现这一目标。我仍然希望有潜伏在其中的功能可以给出图形对象的完整符号表示。
至于加载Combinatorica软件包后出现的符号冲突,您仍然可以通过显式指定软件包名称来访问原始符号,例如系统`CompleteGraph。如果您希望系统符号优先于Combinatorica符号,则可以评估以下表达式以更改包搜索顺序:
$ContextPath =
$ContextPath /.
{x___, c : "Combinatorica`", y___, s:"System`", z___} :> {x, y, s, c, z}
我注意到Wolfram通过在加载软件包时发出可怕的警告消息来有效地弃用Combinatorica软件包。
关于wolfram-mathematica - Mathematica 8.0中的新图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301833/