【问题标题】:Mathematica GraphPlot and the EdgeRenderingFunctionMathematica GraphPlot 和 EdgeRenderingFunction
【发布时间】:2010-09-26 01:43:51
【问题描述】:

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

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

Where are the arrows? Can you see them? Did you take my arrows? http://img816.imageshack.us/img816/9703/graphbadarrows.png

如您所见,如果箭头位于节点顶部,就会像他们所说的那样。有没有一种简单的方法来hax它?

【问题讨论】:

  • 看起来很简洁,你能分享你为此编写的代码吗?

标签: graph wolfram-mathematica


【解决方案1】:

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

当然,您的 Graphics 对象可能具有不同的结构。

马克·麦克卢尔

【讨论】:

  • 看起来不错,我会尝试并报告!
【解决方案2】:

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

这也将减少节点的拥塞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2011-05-27
    相关资源
    最近更新 更多