环境配置:
1,安装graphviz。
2、添加dot的环境变量。
——————————————————————————————————————————
dot语法
主函数有两种:
有向图(directed graph):
digraph my_name(图的名字,自己命名)
{
……
}
无向图:
graph my_name(图的名字,自己命名)
{
……
}
————————————————————————全局性质—————————————————————————
在dot语法中,对于所有字符串,除了多语句节点(因为最外层的双引号管辖所有内容,就像变向花括号一样)都应该加上双引号。如果是单个单词(即中间没有空格)就可以不加。
字符串当中可以加上\n换行符。
颜色名称可以用字符串形式的颜色坐标来表示,如[color=".7 .3 1.0"]。
每一个[ ]括号内都可以写多个相同类型的句子并列,即[语句,语句,语句],如:a[fontname = Verdana, color=navy, shape=record, height=.1];
————————————————————————————————————————————————————
———————————————————————全局设置——————————————————————
设置图大小:
size="数字,数字"; ,如size="2,2"; 单位为英寸,此语句可放在函数的任意位置。
++++++++设置整张图的label:++++++++
内容:
label="显示在图上的内容";
竖直方向的位置:
labelloc=参数值,参数值有b(bottom)和t(top)。如果不设置的话,默认为bottom。
水平方向上的位置:
labeljust=参数值,参数值有l(left)和r(right),其他任意值代表middle。如果不设置的话,默认middle。
-------------------------------------------
设置边属性:
edge [边的属性设置语句]; 如 edge [color=red,style=dotted]; 辖域是这句话之后构建的所有的边。
优先级按出现顺序来决定,后出现的优先级比先出现的高,也就是说可以被新的同属性语句覆盖。
设置节点属性:
node[节点的设置语句];如node [fontname = Verdana, color=navy, shape=record, height=.1]; 辖域是这句话之后所有的节点。
优先级按出现顺序来决定,后出现的优先级比先出现的高,也就是说可以被新的同属性语句覆盖。
设置边方向:
rankdir=参数值;参数值有LR(从左到右),RL,BT,TB,表示节点结构是水平放置还是竖直放置。没设置的话默认为TB。
可以放在代码的任意位置。
———————————————————————————————————————————————————————————
————————————————————————————设置节点属性———————————————————————————
设置节点的框的形状:
节点文字内容[shape=框的风格名称]; 比如:a[shape=box]; 不设置的话默认是椭圆。如果是 plaintext就只有文字,没有边框。
设置节点边框的大小:
节点文字内容[width=值,height=值]。例如a[width=.1,height=2.5]; 单位为英寸。
设置节点边框的颜色:
节点文字内容[color=颜色名称]; 比如:a[color=red];
设置节点填充:
默认不填充。节点文字内容[style=filled];,填充颜色同设置的边框颜色,没有设置边框颜色就默认用灰色填充。
节点的设置和边的构造不能同时进行,比如a[color=red]->b; 是不可以的
++++++++++++【多边形边框节点】++++++++++++++
对节点的形状来说,除了shape=record(矩形)和Mrecord(圆角矩形)的边数已经定了,还有circle那些曲边的形状以外,其他的多边形(polygon)可以设置
多边形边框的边数:
节点文字内容[sides=边数]; 如a[sides=5]; 节点a的边框就是五边形。
--------------------------------------------------------------
设置节点边框层数:
节点文字内容[peripheries=层数]; 比如:a[peripheries=3]; 效果就是有3条边缘线。
设置边节点框形状是否规则:
节点文字内容[regular=是/否]; 比如:a[regular=true]; 不设置的话默认是false
设置节点边框偏移角度:
节点文字内容[orientation=偏移角度]; 如a[orientation=45]; 即偏移45度。 默认为竖直,0度 怎么设置往左还是往右偏?
重命名节点文字内容:
原节点文字内容[label=新节点文字内容]; 注:只能重命名节点的文字内容,不能重命名边上标签的内容。
+++++++++设置节点内多语句(只有在shape=record和Mrecord的情况下才能使用)++++++++++
设置多语句:
节点名[label="<地址名>内容|<地址名> 内容|<地址名> 内容"]; 说明:节点名不会显示出来(因为框内要显示多语句),比如:a[shape=record,label="<f0>one|<f1>two|<f2> three"]; 显示出来就是有一个1*3的方框格,从左到右里面的内容是one,two,three。另外,内容可以是一个空格(不写或者写多个空格显示出来都是一个空格子)。
<xxxx>这种标签的作用相当于是给对应内容绑定的地址,如果需要设置边的射出射入点的位置,就需要用到这个了。可以只给其中几个语句写上,也可以不写。不同节点之间的语句地址标签名可以重复。
设置多语句摆放位置:
比如:节点名[label="内容 | { 内容 | 内容 } | 内容"]; 当中的花括号是改变水平/竖直方向的,可以在任意位置设置,可以多重叠加。默认是水平方向。这里的话就变成了一个1*3的方格,中间那个方格又被分为2*1,即竖直方向的两个方格。
-----------------------------------------------------------------------------------------------------
————————————————————————————————————————————————————————
———————————————————————————构造边—————————————————————————
一对一:
有向图中:节点文字内容 ->节点文字内容,如a->b。
无向图中:节点文字内容 --节点文字内容 ,如a--b。
一对多:
有向图:节点文字内容->{节点文字内容 ;节点文字内容 ;节点文字内容 } ; 如:a->{b;c;d};
无向图:节点文字内容--{节点文字内容 ;节点文字内容 ; 节点文字内容 } ; 如:a--{b;c;d};
可以用"子节点组成集合"的方式来记忆。
多对一:
有向图:{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 }->节点文字内容 ; 如:{b;c;d}->a;
无向图:{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 }--节点文字内容 ; 如:{b;c;d}--a;
多对多:
有向图:{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 }->{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 } ; 如:{m,n,p,q}->{b;c;d}; 会有4*3=12条边。
无向图:{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 }--{ 节点文字内容 ; 节点文字内容 ; 节点文字内容 } ; 如:{m,n,p,q}--{b;c;d};
构造边就像离散数学的二元关系当中的笛卡尔乘积。
设置边的射出与射入位置:
节点 : 参数值->节点 : 参数值,
参数值有:
1、系统中的 "n", "ne","e", "se", "s", "sw", "w" 和 "nw",
2、 自己在多语句节点里面设置的地址标签。
冒号之后的参数就表示此节点与边连接的位置。可以不设置,默认为两节点之间最近的位置,比如:如果rankdir是竖直情况的话,a->b的默认就是a:s->b:n; 默认都是中间。
—————————————————————————————————————————————————————
————————————————————————设置边的属性———————————————————————
设置边的权重:
节点文字内容->节点文字内容[weight=数值]; 如:a->b[weight=2]; 不设置的话权值默认为1。
设置边的风格:
节点文字内容->节点文字内容[style=风格名称]; 如:a->b[style=dotted]; 会画出一条从a到b的有向虚线段。
设置边的颜色:
节点文字内容>节点文字内容[color=颜色名称]; 如:a->b[color=red];
设置边的标签:
节点文字内容->节点文字内容[label="想在边上显示的文字"]; 如:a->b[label="This is a label"]; 怎么设置label位置在边的上,下,左,右?
设置两节点间边的方向:
节点文字内容>节点文字内容[dir = 方向名称]; 如:a->b[dir=both]; a--b[dir=back];
方向名称有:4个系统方向名称:both(a<->b),none(a--b),back(a<-b),forward(a->b)。有向图中默认为forward,无向图中默认为none。
——————————————————————————————————————————————————————————
————————————————————————全局设置————————————————————————
全局边设置:
edge [边的属性设置语句]; 如 edge [color=red,style=dotted]; 辖域是这句话之后构建的所有的边。
优先级按出现顺序来决定,后出现的优先级比先出现的高,也就是说可以被新的同属性语句覆盖。
全局节点设置:
node[节点的设置语句];如node [fontname = Verdana, color=navy, shape=record, height=.1]; 辖域是这句话之后所有的节点。
优先级按出现顺序来决定,后出现的优先级比先出现的高,也就是说可以被新的同属性语句覆盖。
————————————————————————————————————————————————————————
颜色名称列表:
形状名称列表: