dot language 学习笔记
dot language 学习笔记
Table of Contents
1 dot 语言简介
DOT语言是一种文本图形描述语言。文件扩展名通常为.gv或.dot 。它可以导出的格式有:GIF、PNG、SVG、PDF及PostScript。
2 基本语法
2.1 常用图形
- box、polygon、ellipse、circle、point、triangle、invtriangle、plaintext、diamond
digraph shapes {
"Box"[shape=box]
"Polygon"[shape=polygon,sides=7] /* 定义了一个7边行,sides属性定义多边形边的数量 */
"Ellipse"[shape=ellipse]
"Circle"[shape=circle]
"Point"[shape=point]
"triangle"[shape=triangle]
"invtriangle"[shape=invtriangle]
"plaintext"[shape=plaintext]
"diamond"[shape=diamond]
}
想了解更多内容,那就点击我。
2.2 常用线条
- 无向线条、又向线条、双向线条
digraph lines {
"Undirected1"->"Undirected2"[arrowhead=none]
"Undirected1"->"Directed1"
"Directed1"->"Directed2"[dir=both]
}
- 实线、虚线、点线、加粗、透明
digraph lines2 {
rankdir=LR
"solid"->"dashed"[style=solid]
"dashed"->"dotted"[style=dashed]
"dotted"->"bold"[style=dotted]
"bold"->"invis"[style=bold]
"invis"->"solid"[style=invis]
}
2.3 常用箭头
- box、crow、curve、icurve、diamond、dot、inv、none、normal、tee、vee
digraph arrow {
rankdir=LR "box"->"crow"[arrowhead=box]
"crow"->"curve"[arrowhead=crow]
"curve"->"diamond"[arrowhead=curve]
"diamond"->"dot"[arrowhead=diamond]
"dot"->"inv"[arrowhead=dot]
"inv"->"none"[arrowhead=inv]
"none"->"normal"[arrowhead=none]
"normal"->"tee"[arrowhead=normal]
"tee"->"vee"[arrowhead=tee]
"vee"->"box"[arrowhead=vee] #来个高级的用法
a->b[arrowhead=lcrowortee]
}
想了解更多内容,那就点击我。
2.4 常用属性
2.4.1 Node常用属性
属性名 | 默认值 | 说明 |
---|---|---|
color | black | node图形颜色,see color values |
fontcolor | black | 字体颜色 |
fontname | Times-Roman | 字体 |
fontsize | 14 | 字体大小 |
image | node背景图片地址 | |
label | node name | node 显示内容 |
shape | ellipse | 形状 |
style | 图形样式,eg. bold、dotted、filled | |
height | .5 | 最低高度尺寸 |
width | .75 | 最低宽度尺寸 |
URL | 点击跳转地址 | |
target | 点击跳转打开方式 |
digraph demo_node {
rankdir=LR
"default_node"
"node"[shape=box,color=antiquewhite,style=filled,label="node attrs",fontcolor=brown,fontsize=10,URL="http://www.baidu.com",target="_brank"]
"default_node"->"node"
}
2.4.2 Edge常用属性
属性名 | 默认值 | 说明 |
---|---|---|
arrowhead | normal | 箭头样式 |
arrowsize | 1.0 | 箭头尺寸 |
color | black | 颜色 |
dir | forward | 箭头方向 |
edgeURL | 点击跳转地址 | |
fontcolor | black | 字体颜色 |
fontname | Times-Roman | 字体 |
fontsize | 14 | 字体大小 |
headport | 线条头部连接处,eg.n、ne、e、se、s、sw、w、nw | |
label | 描述内容 | |
labelfontcolor | black | label字体颜色 |
labelfontname | Times-Roman | label字体 |
labelfontsize | 14 | label字体大小 |
style | 图形样式,eg.bold、dotted、filled | |
tailport | 线条尾部连接处,eg.n、ne、e、se、s、sw、w、nw | |
weight | 1 | integer cost of stretching an edge |
digraph demo_edge {
rankdir=LR
a->b[label="Yes",labelfontcolor=blue]
edge[arrowhead=box,arrowsize=1.5,color=red,dir=both,style=dotted,weight=10]
b->c
}
2.4.3 Graph常用属性
属性名 | 默认值 | 说明 |
---|---|---|
bgcolor | 背景颜色 | |
color | black | for clusters,outline color,and fill color |
dpi | 96 | 图像输出像素 |
fillcolor | black | cluster fill color |
fontcolor | black | 字体颜色 |
fontname | Times-Roman | 字体 |
fontsize | 14 | 字体大小 |
label | 描述内容 | |
landscape | true:orientation=landscape | |
rank | 子图等级限制, same,min,max,source,sink | |
rankdir | TB | 图片排列方式,LR(left to right) or TB(top to bottom) |
size | 最大图片尺寸 | |
style | 图片样式 | |
stylesheet | pathname or URL to XML style sheet for SVG | |
URL | 点击跳转地址 | |
target | 点击跳转打开方式 |
digraph demo_graph {
bgcolor=beige
fontcolor=gray10
fontsize=12
label="this is demo"
rankdir=TB {rank=same; "level1" "a-level1" "b-level1" "c-level1"}
{rank=same; "level2" "d-level2" "e-level2"}
{rank=same; "level3" "f-level3" "g-level3" "h-level3" "i-level3" "j-level3"}
{rank=same; "level4" "k-level4"}
"level1"->"level2"->"level3"->"level4"
"a-level1"->"d-level2"
"e-level2"->{"h-level3", "k-level4"}
"b-level1"->{"e-level2", "f-level3", "i-level3", "k-level4"}
"c-level1"->{"d-level2", "g-level3", "h-level3"}
"j-level3"->{"f-level3", "k-level4"}
}
2.5 子图
dot支持将一组元素组合成一个子图,且一个图形可以包含一个及多个子图。
使用子图需要注意以下两点:
- 子图node无法在主图rank中使用。
- 子图命名必须以:"cluster"作为前缀。
digraph demo_subgraph {
bgcolor=beige
fontcolor=gray10
fontsize=12
label="this is demo"
rankdir=TB /* 特别注意: 子图命名必须以"cluster"为前缀 */
subgraph "cluster_g1" {
label="g1"
bgcolor=cadetblue
"level1"->"level2"->"level3"->"level4"
} subgraph "cluster_g2" {
label="g2"
bgcolor=cornsilk
"level2"
"d-level2"
"e-level2"
} subgraph "cluster_g3" {
label="g3"
bgcolor=cornsilk
"level3"
"f-level3"
"g-level3"
"h-level3"
"i-level3"
"j-level3"
} "a-level1"->"d-level2"
"e-level2"->{"h-level3", "k-level4"}
"b-level1"->{"e-level2", "f-level3", "i-level3", "k-level4"}
"c-level1"->{"d-level2", "g-level3", "h-level3"}
"j-level3"->{"f-level3", "k-level4"}
}
2.6 其他用法
2.6.1 label使用html标签
digraph html {
abc [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR><TD ROWSPAN="3"><FONT COLOR="red">hello</FONT><BR/>world</TD>
<TD COLSPAN="3">b</TD>
<TD ROWSPAN="3" BGCOLOR="lightgrey">g</TD>
<TD ROWSPAN="3">h</TD>
</TR>
<TR><TD>c</TD>
<TD PORT="here">d</TD>
<TD>e</TD>
</TR>
<TR><TD COLSPAN="3">f</TD>
</TR>
</TABLE>>];
}
2.6.2 使用label定义子节点
digraph structs {
node [shape=record];
struct1 [shape=record,label="<f0> left|<f1> middle|<f2> right"];
struct2 [shape=record,label="<f0> one|<f1> two"];
struct3 [shape=record,label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"];
struct1:f1 -> struct2:f0;
struct1:f2 -> struct3:here;
}
3 总结
通过这几天对dot语言的学习,发现它还是非常强大和灵活的。只要能够发挥你的组合及想象能力,肯定是能够满足一些基本文档图表的绘制需求。而且还摆脱了普通制图功能繁琐的排版工作,还是非常适合有一定编程基础的用户使用的。
个人非常厌恶繁琐的排版工作,因此emacs + org-mode + Graphviz会是以后书写文档的必备工具。
之后有时间在将ditaa及plantuml集成进来,毕竟用他们绘制一些专业图表还是更加快捷方便一些。
参考文献:
http://billnote.github.io/chenfanyu/archive/2013/01/27/2878845.html
http://coldnew.github.io/blog/2013/07/13_07e15.html
http://www.graphviz.org