大家好,欢迎来到IT知识分享网。
DOT, GraphViz 简介
- DOT 是一种文本图形描述语言。DOT 语言文件通常具有 .gv 或是 .dot 的文件扩展名。在编写好 DOT 文件之后,需要有专门的程序处理这些文件并将其渲染成为图片,dot 就是其中一款程序,它可以将 DOT 语言描述的图形渲染成 GIF,PNG,SVG,PDF 等多种格式文件。
- GraphViz 是一个开源软件包,提供可以运行 DOT 文件的 dot 程序。Graphviz 中包含了众多的布局器:
dot
, 默认布局方式,主要用于有向图neato
, 基于 spring-model (又称 force-based )算法twopi
, 径向布局circo
, 圆环布局fdp
, 用于无向图
基本用法,以下语句绘制一个简单的有向图:
digraph G{
a->b;
b->d;
c->d;
}
运行命令行 dot -Tsvg graphviz_example_1.dot -o graphviz_example_1.svg
,上面的代码得到以下结果:
示例
- 强调一条路径
graph {
rankdir=LR;
a -- b -- d -- c -- f[color=red,penwidth=3.0];
b -- c;
d -- e;
e -- f;
a -- d;
}
- 聚集子图
digraph {
subgraph cluster_0 {
label="聚集子图 1";
a -> b;
b -> c;
}
subgraph cluster_1 {
label="聚集子图 2";
a -> f;
f -> c;
}
}
需要注意的是,子图的名称前缀必须为 cluter
才可以显示边框及 label。
- 自动机
digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_4;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
}
DOT 语法
结点或者边都可以通过语法 (node|edge) attr_list
指定属性列表 attr_list
,比如文字字体 family、大小、结点形状、箭头形状、箭头起始位置等等。关于属性的选择可以参考官方文档 https://www.graphviz.org/doc/info/attrs.html。
digraph {
Tinos [ fontname="Tinos" ];
Handlee [ fontname="Handlee" ];
"Sedgwick Ave" [ fontname="Sedgwick Ave" ];
"*also Sedgwick*";
}
Graph 属性
label="Simple_Graph"
为图加 labelrankdir=LR
图结构从左往右,默认 TB (top-bottom)splines="line"
强制直边,不要弯曲边
Edge 属性
graph
画无向图,diagraph
有向图- 在边上可以指定属性,比如
hello -> world [ color="orange", penwidth=3.0 ];
设定着色为橙色,penwidth
加粗边
Others
- 小技巧:有时候当结点及边过多,结点的上下或者左右顺序发生变化,我们可能添加隐形的边来强制它们之间关系。比如
a->b [style=invisible, dir=none];
写作主要参考
- 几个简单但很有代表性的例子 https://graphs.grevian.org/example
- 比较 formal,有点像工具集文档。https://www.graphviz.org/pdf/dotguide.pdf
- GraphViz Gitlab 文档 http://graphviz.gitlab.io/gallery/
- Python API https://graphviz.readthedocs.io/en/stable/manual.html
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22209.html