WOLFRAM 语言教程

有向图的分层绘制

LayeredGraphPlot 试图在一系列层次中画出图的各个顶点,其中把主导顶点放置在顶部,并逐步画出低层次的顶点.

LayeredGraphPlot[{vi1->vj1,vi2->vj2,}]
以分层形式生成图的一个图线,其中顶点 与顶点 相连
LayeredGraphPlot[{{vi1->vj1,lbl1},}]
把标签 与图中的边相联系
LayeredGraphPlot[g,pos]在图线中的位置 pos 上放置主导顶点
LayeredGraphPlot[m]产生由邻接矩阵 m 表示的分层图

分层绘图.

LayeredGraphPlot 绘制一个图,使得边的指向主要是向下的. LayeredGraphPlot 的第二个变量指明根节点的位置. 该变量的可能值为 RightLeftTopBottom.

这里画出一个有向图.
In[1]:=
Click for copyable input
Out[1]=
以下是同样的图,其中边的指向从左到右.
In[2]:=
Click for copyable input
Out[2]=

由于浮点的不同,LayeredGraphPlot 可能会在不同的平台上,产生稍有不同的输出.

LayeredGraphPlot 的选项

除了 Graphics 的选项,LayeredGraphPlot 也接受下列选项.

选项名
默认值
DataRangeAutomatic所产生的顶点坐标的范围
DirectedEdgesTrue是否把边显示为有向箭头
EdgeLabelingTrue是否包含对边给出的标签
EdgeRenderingFunctionAutomatic对边给出明确的图形函数
MultiedgeStyleAutomatic如何在顶点之间绘制重边
PackingMethodAutomatic用于排列分量的方法
PlotRangePaddingAutomatic在图线周边填充的空白量
PlotStyleAutomatic绘制对象所采用的样式
SelfLoopStyleAutomatic如何绘制连接一个顶点自身的边
VertexCoordinateRulesAutomatic明确的顶点坐标的规则
VertexLabelingAutomatic是否把顶点名称显示为标签
VertexRenderingFunctionAutomatic对顶点给出明确的图形函数

LayeredGraphPlot 的选项.

DirectedEdges

DirectedEdges 选项指定是否把边画为箭头. 该选项的可能值为 True 或者 False. 该选项的默认值为 True.

这里显示了一个图,其中边由线表示,而不是由箭头表示.
In[3]:=
Click for copyable input
Out[3]=

EdgeLabeling

EdgeLabeling 选项指定是否并且如何显示对边给定的标签. 该选项的可能值为 TrueFalse 或者 Automatic. 该选项的默认值为 True,在默认值下,显示图中给定的边标签. 设置 EdgeLabeling->Automatic 时,标签显示为工具提示条.

这里显示指定的边标签.
In[4]:=
Click for copyable input
Out[4]=
这里把标签显示为工具提示条. 把光标放置在顶点3和顶点6之间的边上,就可以看到工具提示条.
In[5]:=
Click for copyable input
Out[5]=
另外,也可以使用 Tooltip[vi->vj,lbl] 指定一条边的工具提示条. 把光标放置在顶点3和顶点6之间的边上,以及顶点3和顶点5之间的边标签上,就可以看到工具提示条.
In[6]:=
Click for copyable input
Out[6]=

EdgeRenderingFunction

EdgeRenderingFunction 选项指定了图的边的图形表示方法. 该选项的可能值为 AutomaticNone 或者是一个给出图形基元和指令的合理组合的函数. 使用默认设置 Automatic,对每条边使用深红色的线绘制. 当设置EdgeRenderingFunction->None 时,则不绘制边.

这里只画出顶点.
In[7]:=
Click for copyable input
Out[7]=

设置 EdgeRenderingFunction->g 时,每条边使用由图形基元和由函数 g 给定的指令绘制. 它可以采用三个或多个变量,形如 ,其中 是边的起点或终点的坐标, 是起始和终止顶点,而 是为边指定的任意标签或者或者 None. EdgeRenderingFunction->g 的明确设置重载 EdgeLabelingDirectedEdges 的设置.

这里以灰色箭头绘制边,其端点与顶点相距 0.3 的距离(在图的坐标系统中).
In[8]:=
Click for copyable input
Out[8]=
这里分别使用黑色和红色箭头显示边和自循环. Graph Utilities Package 中的函数LineScaledCoordinate 在沿着边的 70% 位置处添加文本.
In[9]:=
Click for copyable input
In[10]:=
Click for copyable input
Out[10]=

MultiedgeStyle

选项 MultiedgeStyle 指定是否在两个顶点之间绘制重边. MultiedgeStyle 的可能值为 Automatic(默认)、TrueFalse 或者一个正实数. 在默认设置 MultiedgeStyle->Automatic 下,对于由规则列表指定的图显示重边,而如果图由邻接矩阵指定,则不显示重边. 设置 MultiedgeStyle->δ 时,重边以尺度化的距离 δ 展开.

默认情况下,如果图由规则列表给出,则显示重边.
In[11]:=
Click for copyable input
Out[11]=
但是如果图由邻接矩阵指定,则不显示重边.
In[12]:=
Click for copyable input
Out[12]=
这里使用指定量展开重边.
In[13]:=
Click for copyable input
Out[13]=

PackingMethod

选项 PackingMethod 指定用来排列非连通分量的方法. 该选项的可能值为 Automatic(默认)、. 设置 PackingMethod->"ClosestPacking" 时,使用位四角法(polyomino method)[6] 从左上角开始排列并且使分量的距离尽可能接近. 设置 PackingMethod->"ClosestPackingCenter" 时,从中心开始排列分量. 设置 PackingMethod->"Layered" 时,从左上角开始分层排列. 设置 PackingMethod->"LayeredLeft" 或者 PackingMethod->"LayeredTop" 时,分别从上/左开始分层排列分量. 设置 PackingMethod->"NestedGrid" 时,在嵌套网格中排列各分量. 典型默认设置为PackingMethod->"Layered",从最大边界框区域中的分量开始进行排列.

这里显示使用默认方法,对于不连通分量的排列.
In[14]:=
Click for copyable input
Out[14]=
这里显示使用 方法,对于不连通分量进行排列.
In[15]:=
Click for copyable input
Out[15]=

PlotRangePadding

PlotRangePadding 是由 LayeredGraphPlot 继承的图形函数的通用选项.

PlotStyle

PlotStyle 是由 LayeredGraphPlot 继承的图形函数的一个通用选项. 选项 PlotStyle 指定了绘制对象所采用的样式.

使用较粗的箭头绘制边,并且边和顶点的标签都是红色的.
In[16]:=
Click for copyable input
Out[16]=

SelfLoopStyle

选项 SelfLoopStyle 指定是否以及如何对与自身连接的顶点绘制自循环(loop). 该选项的可能值为 Automatic (默认)、TrueFalse 或者一个正实数. 设置 SelfLoopStyle->Automatic 时,如果图由规则列表指定,则显示自循环,但是如果由邻接矩阵给定,则不显示. 设置 SelfLoopStyle->δ 时,自循环使用直径 δ 绘制(相对于平均边长).

默认情况下,对于由规则列表指定的图,显示自循环.
In[17]:=
Click for copyable input
Out[17]=
如果图由邻接矩阵指定,则不显示自循环.
In[18]:=
Click for copyable input
Out[18]=
这里显示自循环,它的直径为平均边长的 0.3 倍.
In[19]:=
Click for copyable input
Out[19]=

VertexCoordinateRules

选项 VertexCoordinateRules 指明顶点坐标. 可能值为 None 或者坐标列表. LayeredGraphPlot 目前不支持由规则列表指定的坐标.

这里使用已知的坐标绘制 Petersen 图.
In[20]:=
Click for copyable input
Out[20]=
这里使用默认方法绘图.
In[21]:=
Click for copyable input
Out[21]=

VertexLabeling

选项 VertexLabeling 指定是否把顶点名称显示为标签. 该选项的可能值为 TrueFalseAutomatic(默认)以及 Tooltip. VertexLabeling->True 显示标签. 对于由邻接矩阵指定的图,顶点标签采用连续整数 ,其中 n 是矩阵的大小. 对于由规则列表指定的图,标签是在规则中使用的表达式. VertexLabeling->False 把每个顶点显示为一个点. VertexLabeling->Tooltip 把每个顶点显示为一个点,并且在工具提示条中给出它的名称. VertexLabeling->Automatic 把每个顶点显示为一个点,如果顶点数不太大的话,同时还会在工具提示条中给出它的名称. 用户也可以在规则列表的任意位置中使用 Tooltip[vk,vlbl] 来为顶点 指定其它工具提示条.

这里绘制图,其中标签以邻接矩阵索引的形式给出.
In[22]:=
Click for copyable input
Out[22]=
这里使用规则列表中指定的标签.
In[23]:=
Click for copyable input
Out[23]=
这里把顶点绘制为点,并且在工具提示条中显示顶点名称. 把光标放置在顶点上就可以看到标签.
In[24]:=
Click for copyable input
Out[24]=

VertexRenderingFunction

VertexRenderingFunction 选项指定图的边的图形表示. 该选项的可能值为 AutomaticNone、或者是一个给出图形基元和指令的合理组合的函数. 使用默认设置 Automatic,顶点显示为点,而它们的名称以工具提示条的形式给出.

默认情况下,顶点显示为点,而对于小规模的图来说,标签以工具提示条的形式给出. 把光标放在顶点处就可以看到工具提示条.
In[22]:=
Click for copyable input
In[23]:=
Click for copyable input
Out[23]=
这里绘制相同的图,但是不绘制顶点.
In[24]:=
Click for copyable input
Out[24]=

设置 VertexRenderingFunction->g 时,每个顶点使用由 给定的图形基元绘制,其中 是顶点坐标,而 是顶点标签. VertexRenderingFunction->g 的明确设置重载 VertexLabeling 的设置.

这里把顶点显示为黄色的圆盘.
In[27]:=
Click for copyable input
Out[27]=

示例

流程图

LayeredGraphPlot 帮助可视化流程图,例如应用在商业、经济或技术演讲中.

这里显示一个流程图.
In[28]:=
Click for copyable input
Out[28]=
这里显示一个从左流到右的流程图.
In[29]:=
Click for copyable input
Out[29]=

食物链

使用 LayeredGraphPlot 可视化食物链.

这里显示一个小的食物链.
In[30]:=
Click for copyable input
Out[30]=
这里显示另一个食物链.
In[2]:=
Click for copyable input
Out[2]=

Unix 的历史

LayeredGraphPlot 适用于可视化历史事件.

这里显示 Unix 的历史.
In[32]:=
Click for copyable input
Out[32]=