EdgeRenderingFunction和VertexRenderingFunction帮助

Ama*_*tya 6 wolfram-mathematica

我正在尝试构建一个LayeredGraphPlot,其中一些节点连接到其他节点,如树.我想有自由选择每个边缘的厚度,颜色,是否存在标签.

我还想自由地显示一些顶点名称并将一些顶点显示为"点".我似乎无法理解EdgeRenderingFunction和VertexRenderingFunction如何使我能够做到这一点.

我是mathematica的新手.我点击了有关Wolfram帮助页面的更多信息,但它似乎有一个模糊的描述而不是精确的语法,其次是一些可爱但无益(对我而言)的例子(与数学工作中的matlab相比,帮助提供了精确的语法..至少在我的脑海里).
我已经查阅了大约10本数学书籍(史密斯和布拉奇曼,mathematica揭秘等等),但它们似乎都只用一两个例子来表面覆盖函数,并没有提供最通用的语法.

有人可以帮忙解决这个问题,我也很欣赏如何学习mathematica的技巧吗?我是个聪明人,学习如何使用命令我不会有太多麻烦.

LayeredGraphPlot [{1-> 2,1-> 3,2> 4,3> 5,3-> 6}]

例如,我想:

  1. 抑制除顶点4,5和6之外的所有顶点名称.
  2. 颜色为蓝色,边缘厚度为3-> 6,2-> 4和1-> 3
  3. 所有其他边缘都是红色和薄的

WRe*_*ach 7

VertexRenderingFunctionEdgeRenderingFunction允许您明确控制在图形中绘制顶点和边的方式.这两个函数都需要返回对Graphics命令有效的符号图形指令(或此类指令列表).

让我们开始吧VertexRenderingFunction.我们将定义一个名为的新函数drawVertex.A VertexRenderingFunction用两个参数调用:顶点的位置(作为X/Y坐标对)和顶点的名称.

drawVertex[position_, vertex:(4 | 5 | 6)] :=
  Inset[Framed[vertex, Background -> LightMagenta], position]

drawVertex[position_, _] :=
  {PointSize[Medium], Blue, Point[position]}
Run Code Online (Sandbox Code Playgroud)

提供了两个定义drawVertex.第一个仅适用于顶点456.它将这些顶点绘制为框架标签.第二个定义适用于所有其他顶点并绘制简单的蓝点.

现在为一个EdgeRenderingFunction名字drawEdge.该函数将传递三个参数:边的端点,边的源和目标顶点的列表,以及边的标签(如果有的话).在我们的例子中,所有边缘都将绘制为箭头,但颜色和厚度将根据边缘而变化.edgeStyle引入辅助函数来捕获这些差异:

drawEdge[ends_, fromTo_, label_] :=
  Join[edgeStyle[fromTo], {Arrowheads[{{Automatic, 0.5}}], Arrow[ends]}]

edgeStyle[{3, 6} | {2, 4} | {1, 3}] :=
  {Blue, Thick}

edgeStyle[_] :=
  {Red, Thin}
Run Code Online (Sandbox Code Playgroud)

有了这些定义,我们现在可以结合使用它们LayeredGraphPlot来生成自定义图表:

LayeredGraphPlot[{1 -> 2, 1 -> 3, 2 -> 4, 3 -> 5, 3 -> 6},
  VertexRenderingFunction -> drawVertex, EdgeRenderingFunction -> drawEdge ]
Run Code Online (Sandbox Code Playgroud)

分层图