Graphviz CMD命令
命令之间的差别
命令 | 使用用途 |
---|---|
dot | 显然的图具有明确的方向性 |
neato | 渲染的图缺乏方向性 |
twopi | 渲染的图采用放射性布局 |
fdp | 渲染的图缺乏方向性 |
sfdp | 渲染大型的图图片缺乏方向性 |
下面是有向图的不同渲染的结果:
dot渲染结果:
neato渲染结果:
fdp渲染结果
sfdp渲染结果:
twopi渲染结果:
参数说明
在Graphviz中,若您不指定-T参数,Graphviz并不会自动猜测您想要产生什么格式,只会以预设格式渲染。可选格式相当多,包括(但不限于)jpg、png、svg等,全部列表可见官网说明页的最下方。
-o 可让您指定储存档案的档名。如果您不用-o 选项指定输出档名,Graphviz 则会将结果输出到标准输出上(图片格式输出到标准输出就是乱码的二进制文件)。
dot input.dot -T png -o output.txt output.png
使用语法
画图类型
有向图:digraph,节点关系为”->”
无向图:digraph,节点关系为将有向图中箭头设置为none。[dir=none]
或者使用graph则图之间用--
就没有箭头。
注释:采用c++的注释方式/**/和//
如果是全连接的图不用分别制定连接接点,而是直接一起指定。
推荐(逗号分隔)方式
digraph G{
{a,b,c}->{d,e,f}
}
或者(不推荐)
digraph G{
{a b c}->{d e f}
}
设置属性
有了前面介绍过的技巧,所有图面关系都可以顺利地绘制出来。
然而,通常我们画图的时候,还会对图片做一些特别的处理。好比说把字加粗、把图变色、把标签或连接线的外型改变、把某些节点水平对齐……诸如此类。
要控制这些东西,就要用到属性。
属性有四种:
1. 用在节点上(Node, N)
2. 用在线段上(Edge, E)
3. 用在根图片上(Graph, G)
4. 用在子图片上(Cluster subgraph, C)
您可以阅读手册中的表,判断哪些属性能用在哪些地方。
那么,属性要怎么用呢?
属性的套用
如果要设定根图片或子图片的属性,得像前面范例中所示的那样,在图片的大括号范围内指定.属性名称=值这样就行了。
对于节点(node) 的属性,有以下几种指定法:
1. 节点名[节点属性名=值];
2. 节点名[节点属性名=值,节点属性名=值];
3. node [节点属性名=值,节点属性名=值];
属性指定的语句必须要被中括号括起。当一次指定多值时,需用英文逗点隔开。
第三行中的node 是个关键字,用来代称「图片范围内」所有「还没创建」的节点,或者您也可将它理解为:在当前大括号的范围内,所有尚未创建节点的属性预设值,会被这个语句给变更。
线段(edge)的属性指定,与节点属性指定方式很类似:
- 节点名->节点名[线段属性名=值];
- 节点名–节点名[线段属性名=值,线段属性名=值];
- edge [线段属性名=值,线段属性名=值];
其中edge 是关键字。
这边顺便补充一个关于线段的观念:有些线段相关的属性,具有head值与tail值。而这边说的head 与tail,得将它想像成一个「箭头」的形状(就像是「a -> b」这样)。
对于线段来说,这个箭头指向的头部才是head。这可能和直觉上不一样,因为这边说的「Head」其实是两个节点中,后面的那一个。
常用的属性
- shape:用来指定节点的形状,支持的形状如这里
- color:设置节点的边框颜色,支持的颜色在这里
- -fontsize:边框中的字体大小
- fontcolor=边框中的字体颜色
- style:设置风格,主要有:
bold, dotted(虚线节点), filled
例如:style=filled
后能设置填充色fillcolor=red
。 - 箭头风格,这里
- width:设置节点的宽度。
- height:设置节点的高度
Graphviz问答
- 问:如何使用左右布局?
答:在代码中加入rankdir=”LR”(上下布局为TB) - 如何设置某一个节点的风格?
答:在图的开头定义的Node是全局节点风格,如果希望指定某一节点的风格可以在图尾指定节点[属性]
,比如设置节点1
形状为box
可以这样1[shape=box]
- 为什么设置了fillcolor看不到填充效果?
答:因为设置填充不仅仅需要fillcolor
同时需要设置style=filled