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}]
例如,我想:
VertexRenderingFunction并EdgeRenderingFunction允许您明确控制在图形中绘制顶点和边的方式.这两个函数都需要返回对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.第一个仅适用于顶点4或5或6.它将这些顶点绘制为框架标签.第二个定义适用于所有其他顶点并绘制简单的蓝点.
现在为一个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)

| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |