Graphviz dot 笔记

2020-05-22 12:05:19 浏览数 (2)

Dot 生成图的默认命令

dot -T<type> -o <outfile> <infile.dot>

dot 可以替换为circo等其他算法,详细见命令的选择章节。

输入文件是 <infile.dot> ,生成的格式由 指定,生成的文件是 。其中 -T 包括:

代码语言:javascript复制
-Tps (PostScript)
-Tsvg -Tsvgz (Structured Vector Graphics)
-Tfig (XFIG  graphics)
-Tmif  (FrameMaker graphics)
-Thpgl (HP pen plotters)
-Tpcl (Laserjet printers)
-Tpng -Tgif (bitmap graphics)
-Tdia (GTK  based diagrams)
-Timap (imagemap files for httpd servers for each node or edge  that  has a non-null "href" attribute.)
-Tcmapx (client-side imagemap for use in html and xhtml)

rank

rank 约束了子图的节点位置,有向图中,一个箭头的指向,带有级别,一般是尾端高于尖端,即 a->b a 的级别要高于 b 的级别。

same : 所有节点在同一级别的节点处

min : 所有节点在最小级别节点处

source : 所有节点在最低级别,且只有子图属性为 source 或者 min 的时候,才能使用同样的级别

max : 类似于 source

sink : 类似于 source

NOTE: 最低级别,可以是 最上最下最左最右

rankdir

  • TB : top-to-bottom
  • LR : left-to-right
  • BT : bottom-to-top
  • RL : right-to-left

dot 线条

代码语言:javascript复制
splines = ortho #直角拆线
splines = spline #曲线(不遮挡)
splines = cuvved #曲线(可遮挡)
splines = line #直线(可遮挡)
splines = polyline #直线(不遮挡)

命令的选择

命令

介绍

dot

渲染图具有明确的方向性

neato

图缺乏方向性

twopi

图采用放射性布局

circo

图采用环形布局

fdp

图缺乏方向性

sfdp

用来渲染大型图,且图片缺乏方向性

静默执行代码

代码语言:javascript复制
(setq org-confirm-babel-evaluate nil) ;;执行静默语句块

dot 实例

  • 绘制流程图: digraph structs { node[shape=record] struct1 [label="<f0> left|<f1> mid dle|<f2> right"]; struct2 [label="{<f0> one|<f1> twonnn}" shape=Mrecord]; struct3 [label="hellonworld |{ b |{c|<here> d|e}| f}| g | h"]; struct1:f1 -> struct2:f0; struct1:f0 -> struct3:f1; }
代码语言:javascript复制
  digraph g {
  size="8,6"
  ratio=expand
  edge [dir=both]
  plcnet [shape=box, label="plc network"]
  subgraph cluster_wrapline {
    label="wrapline control system"
    color=purple
    subgraph {
    rank=same
    exec
    sharedmem [style=filled, fillcolor=lightgrey, shape=box]
    }
    edge[style=dotted, dir=none]
    exec -> opserver
    exec -> db
    plc -> exec
    edge [style=line, dir=both]
    exec -> sharedmem
    sharedmem -> db
    plc -> sharedmem
    sharedmem -> opserver
  }
  plcnet -> plc [constraint=false]
  millwide [shape=box, label="millwide system"]
  db -> millwide
  subgraph cluster_opclients {
    color=blue
    label="operator client"
    rankdir=lr
    labelloc=b
    node[label=client]
    opserver -> client1
    opserver -> client2
    opserver -> client3
  }
}
代码语言:javascript复制
digraph G {
rankdir=LR
node [shape=plaintext]
a [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD ROWSPAN="3" BGCOLOR="yellow">class</TD></TR>
<TR><TD PORT="here" BGCOLOR="lightblue">qualifier</TD></TR>
</TABLE>>
]
b [shape=ellipse style=filled
label=<
<TABLE BGCOLOR="bisque">
<TR><TD COLSPAN="3">elephant</TD>
<TD ROWSPAN="2" BGCOLOR="chartreuse"
VALIGN="bottom" ALIGN="right">two</TD> </TR>
<TR><TD COLSPAN="2" ROWSPAN="2">
<TABLE BGCOLOR="grey">
<TR> <TD>corn</TD> </TR>
<TR> <TD BGCOLOR="yellow">c</TD> </TR>
<TR> <TD>f</TD> </TR>
</TABLE> </TD>
<TD BGCOLOR="white">penguin</TD>
</TR>
<TR> <TD COLSPAN="2" BORDER="4" ALIGN="right" PORT="there">4</TD> </TR>
</TABLE>>
]
c [
label=<long line 1<BR/>line 2<BR ALIGN="LEFT"/>line 3<BR ALIGN="RIGHT"/>>
]
subgraph { rank=same b c }
a:here -> b:there [dir=both arrowtail = diamond]
c -> b
d [shape=triangle]
d -> c [label=<
<TABLE>
<TR><TD BGCOLOR="red" WIDTH="10"> </TD>
<TD>Edge labels<BR/>also</TD>
<TD BGCOLOR="blue" WIDTH="10"> </TD>
</TR>
</TABLE>>
]

}

0 人点赞