Mathematica GraphPlot和EdgeRenderingFunction
当我在等待排序完成时,我想调整我正在处理的Mathematica图的一部分。 问题是节点位于边缘之上,我想知道是否有办法扭转这种情况。 在图片中你可以看到箭头没有显示正确的...
我正在使用自定义的VertexRenderingFunction
和EdgeRenderingFunction
参数来执行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