Mathematica GraphPlot和EdgeRenderingFunction

3
当我在等待 排序 完成时,我想调整我正在处理的 Mathematica 图形的一部分。问题是节点在边的上面,我想知道是否有办法反转这种顺序。在图像中,您可以看到箭头没有正确显示。
我使用自定义的 VertexRenderingFunctionEdgeRenderingFunction 参数做了一个 GraphPlot[],看起来像这样: 箭头在哪里?你能看见它们吗?你拿走我的箭头了吗?http://img816.imageshack.us/img816/9703/graphbadarrows.png 如您所见,如果箭头在节点上方将会更加好看。是否有一个简单的方法可以实现呢?

4
看起来不错,你能分享一下你编写这个的代码吗? - Yaroslav Bulatov
2个回答

4

我不知道是否有一种直接使用GraphPlot选项来实现这个目标的方法,但是您可以直接操作由GraphPlot生成的Graphics对象。例如,这是一个与您的特征类似的图形。

bg = GraphPlot[Table[i -> Mod[3 i + 1, 9],
  {i, 0, 8}], DirectedEdges -> True,
  VertexRenderingFunction -> (
  {{White, Disk[#, 0.15]}, Circle[#, 0.15]} &),
  EdgeRenderingFunction -> (Arrow[#1] &)]

您可以按照以下方式检查图形原语和指令的结构:
  bg // InputForm

你可以看到箭头是放在顶点前面的。只需按以下方式反转即可。
  MapAt[Reverse, bg, {1, 1}]

当然,你的图形对象可能具有不同的结构。
Mark McClure

看起来很不错,我会尝试并回报的! - Gleno

3

Mark的答案完全符合您的要求--而且您可以编写自己的函数来自动执行反向操作。

一个不太直接的解决方案可能只是稍微将箭头头部向后绘制一点:

GraphPlot[Table[i -> Mod[3 i + 1, 9], {i, 0, 8}], 
 VertexRenderingFunction -> ({{White, Disk[#, 0.15]}, 
     Circle[#, 0.15]} &), DirectedEdges -> True, 
 EdgeRenderingFunction -> ({Arrowheads[{{.05, .8}}], Red, 
     Arrow[#]} &)]

这也将减少节点拥堵。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接