dot language 学习笔记
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
dot language 学习笔记的更多相关文章
- 《汇编语言程序设计》(Professional Assembly Language)学习笔记(二)
挖坑:学习笔记(一)讲述如何在 Windows Vmware 上安装 Ubuntu 20.04 实践环境 本文是基于Ubuntu 20.04平台进行实验,下文中的解决方法都基于此前提 问题记录 问题一 ...
- The C++ Programming Language 学习笔记 第7章 函数
1.关于内联函数(inline) 借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); } inline描述符给编译器一个提示,要求 ...
- The C++ Programming Language 学习笔记 第6章 表达式和语句
1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感 ...
- The C++ Programming Language 学习笔记 第5章 指针、数组和结构
1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cou ...
- The C++ Programming Language 学习笔记 第四章 类型和声明
1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return ...
- SQL学习笔记
SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...
- Deep learning with Python 学习笔记(10)
生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- [bzoj3990][SDOI2015]排序-搜索
Brief Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<= ...
- bzoj 2039 最小割模型
比较明显的网络流最小割模型,对于这种模型我们需要先求获利的和,然后减去代价即可. 我们对于第i个人来说, 如果选他,会耗费A[I]的代价,那么(source,i,a[i])代表选他之后的代价,如果不选 ...
- 【mysql优化】大数据量分页优化
limit 翻页原理 limit offset,N, 当offset非常大时, 效率极低, 原因是mysql并不是跳过offset行,然后单取N行, 而是取offset+N行,返回放弃前offset行 ...
- UVALIVE 3307 Adventurous Driving
一开始重新建图搞的.然后参照了别人的博客.这个解法比较好 利用在SPFA维护入队次数.入队次数大于节点数目的位于负环. 那么负环中的点如何DFS到终点.(SPFA从起点开始如果能找到入队大于N那么一定 ...
- 【SQL】多个表的查询
1.元组变量 SELECT * FROM a AS x, a AS y; 结果是显示自己和自己的笛卡尔乘积. 如果查询中对于某一个关系使用了多次,为了区别他们的属性,需要对关系定义别名,然后用 别名. ...
- Selenium2+python自动化43-判断title(title_is)【转载】
前言 获取页面title的方法可以直接用driver.title获取到,然后也可以把获取到的结果用做断言. 本篇介绍另外一种方法去判断页面title是否与期望结果一种,用到上一篇Selenium2+p ...
- poj 1947(树形DP+背包)
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10663 Accepted: 4891 ...
- Tomcat的类加载机制
一个功能健全的Web服务器,要解决如下几个问题: 部署在同一个服务器上的两个Web应用程序使用的Java 类库可以实现相互隔离.不能要求一个类库在一个服务器中只有一份,服务器应当保证两个应用程序的类 ...
- 变量与指针 --- WalMart 寄存箱设计者不懂计算机
一.场景: 今天星期天,难得公司售后同事很给力,项目运行正常,无运维事务需要处理.于是满足堂客(湖南人称老婆)很久来的心愿 陪其逛街(这里要惭愧 检讨作为IT码农常常容易忽略身边的人.大声疾呼:“码农 ...
- hdu5081
题意有点绕,不过读懂了之后并不难 以Si结尾容易想到ac自动机,建好ac自动机并将fail指针反向即可得到一棵树 那么操作1就是将若干个子树的并中的节点全部权值+1 操作2就是将求若干个节点到根的路径 ...