Wolfram mathematica Mathematica 8.0中的新图形
有人想出办法修改Mathematica 8中的图形对象吗?特别是,如何获得与右键单击图形时相同的功能Wolfram mathematica Mathematica 8.0中的新图形,wolfram-mathematica,Wolfram Mathematica,有人想出办法修改Mathematica 8中的图形对象吗?特别是,如何获得与右键单击图形时相同的功能 一些新的图形函数与Combinatica冲突,有没有办法强制Mathematica使用内置版本的函数?换句话说,在导入CompleteGraph的Combinatica版本后,是否有办法访问内置的CompleteGraph 为了澄清1,Graph上的上下文菜单允许您更改GraphStyle和GraphLayout,我希望能够以编程方式更改它们。我发现了一种改变Graph对象GraphStyle的
CompleteGraph
g = GridGraph[{4, 4}];
BooleanGraph[Or, g, g, GraphStyle -> "DiagramBlack"]
但是,这会忘记原始图形的选项,如VertexCoordinates
在网格图上尝试Brett的配方
g = GridGraph[{3, 2}, ImageSize -> Tiny]
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g];
Graph[EdgeList[g], GraphStyle -> "BasicGold",
VertexCoordinates -> coords, ImageSize -> Tiny]
(来源:) Mathematica在图形操作中处理图形坐标的方式似乎存在缺陷。第一行在permutes坐标下面,第二行给出内部警告,可能与坐标有关。为每个顶点使用非整数顶点和显式坐标没有帮助。一种解决方案是全局存储坐标,并使用
fixCoordinates
函数在修改后将正确的坐标重新分配给Graph
VertexDelete[GridGraph[{3, 3}], 1]
NeighborhoodGraph[VertexDelete[GridGraph[{3, 3}], 1], 2]
对于#2,您应该能够使用上下文来区分两者。因此,System`CompleteGraph[5]
创建了一个新的V8图,而combinatica`CompleteGraph[5]
创建了一个旧的combinatica图
我不确定您在#1中的确切含义,但您可以将图形转换为图形,然后上下文菜单将像以前一样出现。不过,我不确定这是否是一种改进。以下内容将保留原始图形的顶点坐标
g = CompleteGraph[5];
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g];
Graph[VertexList[g], EdgeList[g], GraphStyle -> "BasicGold",
VertexCoordinates -> coords]
我认为类似的东西也可以保留其他选项,尽管我没有尝试过。新的图形对象在Mathematica 8中是原子的。因此,像字符串或图像一样,它们没有可以正常操作的内部结构。特别不寻常的是,这些新物体有一个完整的形状,看起来可以象征性地操纵。但外观可能具有欺骗性——不仅是模式匹配无法访问该表示,而且如果您使用复制粘贴将其反馈给Mathematica,它甚至不是有效的图形规范 我发现了一些可以用来操纵图形结构的技巧。第一种方法尝试使用“官方”通道提取图形的属性:
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更改了图形对象的表示形式(甚至现在它适用于所有可能的图形定义),因此无法保证此方法可以不变地工作
应该有一种不用黑客就能做到这一点的方法。我仍然希望有一些函数潜伏在那里,能够给出图形对象的完整符号表示
对于加载Combinatica包后出现的符号冲突,您仍然可以通过显式指定包名来访问原始符号,例如System`CompleteGraph。如果希望系统符号优先于组合符号,可以计算以下表达式以更改包搜索顺序:
$ContextPath =
$ContextPath /.
{x___, c : "Combinatorica`", y___, s:"System`", z___} :> {x, y, s, c, z}
我注意到Wolfram在加载Combinatica包时发出了一条可怕的警告消息,从而有效地拒绝了Combinatica包。Re。2.:System`CompleteGraph?Re#2,您可以从上下文路径中删除Combinatica--然后使用显式的完整路径引用所有Combinatica函数…如何从上下文路径中删除?$ContextPath=DeleteCases[$ContextPath,“Combinatica`],这似乎会改变顶点的顺序,更新示例此行为与GraphPlot类似,GraphPlot有时会置换顶点顺序更新答案,以不置换GridGraph中的顶点。谢谢,这很有效。顶点坐标表中的显式顶点还修复了GraphPlot中的顶点置换。顺便说一句,我偶然发现这个更新,因为stackoverflow只在评论是关于X的问题或X的回答时才向X发送通知