写在前面

第一次了解到dot已经是很久之前的事情了,但是到今天才决定写下一点东西,可见懒到什么程度。最开始对dot感兴趣是因为下面这张图:

网络图

对于这种网络图用visio很容易搞定,但是复制、粘贴、拖拽这些用起来总是感觉不怎么顺手。但是用dot来做就完全不一样了,只需写段文本:

digraph G {

main -> parse -> execute;

main -> init;

main -> cleanup;

execute -> make_string;

execute -> printf;

init -> make_string;

main -> printf;

execute -> compare;

}

然后在需要的时候在这段文本中增加边、节点即可。保存之后只需要用贝尔实验室搞的graphviz来生成目标图片就可以了:

dot -Tpng G.dot -o g.png

这样你的vim、emacs就马上变成了一个可以画图的工具了:)。

可能你觉得这样还不够爽,想想看如果用代码自动生成dot文件,也就是说可以通过用代码输出dot文件来间接到达输出图片的目的,是不是能做的事情多多了?

简单用法

日常中用到画图的地方,知道下面几点基本上就够用了:

有向图(digraph)用a->b,无向图(graph)用a--b;

节点、边通过中括号中的key=value来设置,比如main[shape=box];将main节点设置为矩形;

连接点的方向可以通过b->c:se;进行指定;

使用subgraph定义子流程图;

常用属性

对于各种结构的通用的属性如下:

属性名称

默认值

含义

color

black

颜色

colorscheme

X11

颜色描述

fontcolor

black

文字颜色

fontname

Times-Roman

字体

fontsize

14

文字大小

label

显示的标签,对于节点默认为节点名称

penwidth

1.0

线条宽度

style

样式

weight

重要性

常用边属性如下:

属性名称

默认值

含义

arrowhead

normal

箭头头部形状

arrowsize

1.0

箭头大小

arrowtail

normal

箭头尾部形状

constraint

true

是否根据边来影响节点的排序

decorate

设置之后会用一条线来连接edge和label

dir

forward

设置方向:forward,back,both,none

headclip

true

是否到边界为止

tailclip

true

与headclip类似

常用节点属性如下:

属性名称

默认值

含义

shape

ellipse

形状

sides

4

当shape=polygon时的边数

fillcolor

lightgrey/black

填充颜色

fixedsize

false

标签是否影响节点的大小

常用图属性如下:

属性名称

默认值

含义

bgcolor

背景颜色

concentrate

false

让多条边有公共部分

nodesep

.25

节点之间的间隔(英寸)

peripheries

1

边界数

rank

same,min,source, max,sink,设置多个节点顺序

rankdir

TB

排序方向

ranksep

.75

间隔

size

图的大小(英寸)

高级用法

在dot里面label的玩法比较多,在上面看到的每个节点都是简单的一段文字,如果想要比较复杂的结构怎么办?如下图:

复杂的节点

对应的代码如下:

digraph structs {

node [shape=record];

struct1 [shape=record,label=" left| mid\ dle| right"];

struct2 [shape=record,label=" one| two"];

struct3 [shape=record,label="hello\nworld |{ b |{c| d|e}| f}| g | h"];

struct1 -> struct2;

struct1 -> struct3;

}

这个还不算厉害的,label还支持HTML格式的,这样你能想得到的大部分样子的节点都可以被定义出来了:

HTML格式的label

代码如下:

digraph html {

abc [shape=none, margin=0, label=<

hello
world
b g h
c d e
f

>];

}

接着来看cluster的概念,在dot中以cluster开头的子图会被当做是一个新的布局来处理,而不是在原图的基础上继续操作。比如:

流程图

对应代码如下:

digraph G {

subgraph cluster0 {

node [style=filled,color=white];

style=filled;

color=lightgrey;

a0 -> a1 -> a2 -> a3;

label = "process #1";

}

subgraph cluster1 {

node [style=filled];

b0 -> b1 -> b2 -> b3;

label = "process #2";

color=blue

}

start -> a0;

start -> b0;

a1 -> b3;

b2 -> a3;

a3 -> a0;

a3 -> end;

b3 -> end;

start [shape=Mdiamond];

end [shape=Msquare];

}

如果没有cluster的话我们大概能想象的出来最后的结果是什么样子的。可能会想能不能将一个节点直接指向cluster?答案是不能!对于这种需求可以用lhead来搞定:

digraph G {

compound=true;

subgraph cluster0 {

a -> b;

a -> c;

b -> d;

c -> d;

}

subgraph cluster1 {

e -> g;

e -> f;

}

b -> f [lhead=cluster1];

d -> e;

c -> g [ltail=cluster0, lhead=cluster1];

c -> e [ltail=cluster0];

d -> h;

cluster0->cluster1;

}

生成的图片如下:

节点指向cluster

dot格式绘图工具 html,使用dot来绘图相关推荐

  1. 【工具】1640- 这 5 款 AI 绘图工具,让你的绘图更高效!

    关注 "AI 工具派" 探索最新 AI 工具,发现 AI 带来的无限可能性! 大家好,我是 Chris. 最近我又发现了一些非常优秀的 AI 绘图工具,这些工具可以帮助我们更轻松地 ...

  2. draw.io绘图工具

    draw.io 绘图工具 文章目录 draw.io 绘图工具 1 庞大且付费的visio工具 2 draw.io 1 庞大且付费的visio工具 这又是一篇工具安利文.好用的东西要推广给更多的人知道. ...

  3. PlotJuggler绘图工具无法打开rosbag文件解决方案

    项目场景: 利用PlotJuggler绘图工具进行rosbag数据可视化处理 问题描述 正常安装PlotJuggler绘图工具后,无法打开rosbag文件 原因分析: 3.2更新后将ros支持放在了插 ...

  4. coreldraw梯形校正_入门:CorelDraw12智能绘图工具使用方法详解

    今天为大家带来一篇基础教程,就是教大家利用CorelDraw12智能绘图工具使用方法,教程真的很不错,很值得学习,推荐过来,大家一起来学习吧! 大家都知道CorelDRAW 12新增了Smart Dr ...

  5. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略

    Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图

  6. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件

    Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件 目录 Graphviz软件的下载 Graphviz将dot文件转为结构图的pdf文件 输出结果 Gr ...

  7. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件

    Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件 目录 Graphviz软件的下载 Graphviz使用方法 Graphviz软件的下载 Graphv ...

  8. python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...

    用python绘制蜡烛线型k线图是用代码还是绘图工具 import matplotlib.pyplot as plt from matplotlib.dates import DateFormatte ...

  9. 如何构建一个在线绘图工具:Feakin 是如何设计与构建的?

    高中,读过几本 3D 图形编程相关的书.怎么说呢,自那以后,图形学相关的东西,都不在我的兴趣范围里了.直到最近,我重新燃起了一点兴趣: 架构治理工具 ArchGuard 依赖于「图即代码」,用于生成架 ...

  10. linux怎么进入绘图模式,Linux 绘图工具

    Linux 绘图工具 2016-11-03 Thursday 主要介绍一下 Linux 中的 Gnuplot Graphviz 套件,主要用于画图. Ggnuplot 是一个命令行驱动的绘图工具,可将 ...

最新文章

  1. 深入理解WMS(二):Dialog与Toast源码解析
  2. 【谦先生日志】程序员如何优雅地融入新环境
  3. android串口通讯奇偶校验,串口通讯奇偶数校验及CRC校验如何使用详解
  4. 【小白成长撸】--二分查找
  5. imagej链接资源
  6. 引用: 编写高性能 Web 应用程序的10个技巧
  7. 巧用 Class Extension 隐藏属性
  8. FPGA串口传图sobel边缘检测
  9. 传统3D游戏引擎的Web化
  10. python2048游戏代码_python 实现 2048 游戏 (二)
  11. SAP BW4基础入门篇
  12. html页面中插入flv格式视频
  13. 画动漫人物眼睛怎么上色
  14. 魅族手机sim卡无显示无服务器,设备管理器无显示内容怎么处理?
  15. 笔记本电脑维修90个精选实例
  16. VLOOKUP函数最常用的10种用法
  17. KPA EtherCAT主站协议栈基准
  18. python requests的作用_requests session的作用
  19. 【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?
  20. 大数据Spark学习笔记—未更完

热门文章

  1. 更好的 java 重试框架 sisyphus 的 3 种使用方式
  2. 第六届ACM省赛总结--吕云飞
  3. 传销三级的认定标准_主观明知在传销犯罪中有那么重要吗?
  4. 人工智能原理(学习笔记)
  5. Window7 Chrome 升级提示关闭
  6. 虎牙直播怎么换html5,虎牙直播助手怎么改名字 昵称更换方法
  7. WEP(有线等效保密)
  8. 外星人17r4原版系统_外星人17r4重装系统
  9. 使用 Typora 画图
  10. Spring Cloud Bus 官方文档