Mathematica GraphPlot和EdgeRenderingFunction

当我在等待排序完成时,我想调整我正在处理的Mathematica图的一部分。 问题是节点位于边缘之上,我想知道是否有办法扭转这种情况。 在图片中你可以看到箭头没有显示正确的...

我正在使用自定义的VertexRenderingFunctionEdgeRenderingFunction参数来执行GraphPlot[] 。 它看起来像这样:

箭头在哪里? 你看得到他们吗? 你拿我的箭了吗? http://img816.imageshack.us/img816/9703/graphbadarrows.png

正如你所看到的,如果箭头位于节点的顶部,它们会变得很酷。 有没有简单的方法来解决它?


Mark的回答完全符合你的要求 - 你可以编写自己的函数来自动化Reverse。

一个较不直接的解决方案可能是从最后一点拉回箭头:

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[#]} &)]

这也将减少节点的拥塞。


我不知道是否有方法直接使用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] &)]

您可以按照以下方式检查Graphics原语和指令的结构:

  bg // InputForm

你可以看到箭头放在顶点之前。 简单地如下反转。

  MapAt[Reverse, bg, {1, 1}]

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

马克麦克卢尔

链接地址: http://www.djcxy.com/p/20241.html

上一篇: Mathematica GraphPlot and the EdgeRenderingFunction

下一篇: Shortest distance between a point and a line segment