咱们程序员在工做生活中,有不少场合下须要绘制图表,好比PPT里的图表,学习笔记的一些助记图,还有最多见的,工做中大量使用的流程图。node
在 Window 下,咱们有不少好用的工具,好比 Visio
、 EA
等等。这些软件也很好用,但都有个缺点,那就是太复杂。咱们须要必定的美工基础,还要学不少软件操做,才能画出一张很简单的流程图。程序员
并且,更要命的是,一旦需求发生变更,很很差修改,每每牵一发而动全身。因此常常在听到需求变动的时候,良许就脊背一凉……ide
后来,在大神的介绍下,良许开始使用一个神器。这个神器不须要你懂美工,也不太须要懂软件操做,绘图的过程跟你写软件的过程差很少,短短的几行代码,就能把你头脑里的想法表现出来。工具
并且,不用担忧布局,不用担忧修改,甚至都不用鼠标,也给制做出至关精美的做品!布局
这个神器就是:dot
命令!学习
这个神器还有个图形界面版,叫 Graphviz
,但良许习惯了命令行,通常是在命令行下完成的。字体
咱们先来看下它能作什么。如下几个图片选自它的官网:命令行
这只是其中的几张图而已,更多图片能够去它的官网查看:设计
http://www.graphviz.org
这个软件很是强大,若是掌握得好的话,能够画出很是好看的做品,并且还不怕产品经理改需求。可是,在大多数状况下,咱们不太须要用到它的高级功能,每每一些很基础的功能就能够应付咱们工做中的 80% 以上的需求了。3d
这个软件的安装很简单,只需执行如下命令便可:
sudo apt install graphviz
稍等一小会儿,就安装成功了。而后,就能够愉快地玩耍啦~
咱们先来看看一个 Hello world 水平的做品。
首先,在任意位置建立一个 test.dot
文件(固然也能够叫其它名字),文件的内容以下:
graph g{ "Hello" -- "world" }
而后,执行如下命令:
dot -Tpng -o test.png test.dot
以后,就在当前目录下生成了下面这幅最简单的图片了,是否是很是简单?
咱们来简单介绍下 DOT 命令的语法。在 test.dot 文件里,graph
表示的是这幅图是 无向图
,也就是链接线是没有箭头的。与之对应的是 digraph
,表示 有向图
,链接线是有箭头的。
而图片的描述,是在 {}
里进行,而且也支持注释,注释风格与 C 语言相似,//
用于单行注释, /**/
用于多行注释。
前文提到,dot 命令十分强大,这里只介绍它的最基本的一些用法,而学会这些最基本的命令,就能够应对 80% 左右的工做。更多高级用法能够参考它的官网。
相似于脚本语言,节点无需申明就能够直接使用。而对于节点,咱们通常设置它的如下几个属性:
这些属性是在节点后的一对方括号 []
里设置的。不少状况下,咱们的节点属性是彻底相同的,那么咱们能够定义一个 node
,并对它进行设置,那么图形里全部节点属性都跟 node 同样。若是某个节点想搞特殊,只需单独对它进行设置便可。
graph g{ node [shape = "box", style = "filled", color = "red", fillcolor = "green"] //设置节点的默认形状,类型,颜色,填充颜色 a [shape = "ellipse", fillcolor = "yellow", label = "Hello"] //对某个节点进行单独设置 b [label = "world"] a -- b a -- c //不对c进行设置,使用默认属性 d [shape = "circle",label = "cicle"] //d单独设置属性 c -- d }
链接线依照有无箭头分为有向边和无向边。它的经常使用属性有以下:
对于有向边,还能够设置起点及终点的位置,用 e, s, w, n
表示 东南西北
,也能够组合来表示,详细请看下面实例。
和节点相似,链接线也能够设置默认属性,用 edge
表示。若是不使用默认属性的话,也能够自定义属性。
digraph edge_settings { edge [color = "green", decorate = false] //设置边的默认属性 node [shape = "polygon", sides = 4, color = "blue"] a -> b [style = "dotted", color = "red", label = "a to b"] //设置style、color、label b: se -> c: w [headlabel = "end", taillabel = "start"] //设置边从b的“东南方”出发,从c的“西方”结束,设置有向边起点和终点的label {c, f} -> {d, e} [label = "multi-lines", decorate = true] //能够用这种方式同时画多条边 }
DOT语言能够描述无向图和有向图两种图,graph标识无向图,digraph标识有向图。对于图的属性设置,经常使用的有如下一些:
图里面还能够包含子图,子图必须以 cluster
做为前缀开始。好比官网首页上的图,即本文第一张图,就是图里包含子图,它的源码以下:
digraph graph_settings { start [shape = "Mdiamond"] end [shape = "Msquare"] subgraph cluster_sub1 { label = "process #1" labelloc = "t" bgcolor = "gray55" node [style = "filled", color = "white"] a0 -> a1 -> a2 -> a3 -> a0 } subgraph cluster_sub2 { label = "process #2" labelloc = "t" color = "blue" node [style = "filled", color = "black", fillcolor = "gray55"] b0 -> b1 -> b2 -> b3 } start -> {a0, b0} a1 -> b3 b2 -> a3 {a3, b3} -> end }
利用 dot 命令来绘图,很是省事,也很是灵活,对于设计菜鸟而言,简直不能太方便!它的功能十分强大,本文所介绍的只是它很是经常使用,但也是很是实用的一些基本功能,掌握这些功能就能应对工做中绝大部分的场景。但想要作出更加炫酷的效果,还须要再细细研究它官网的资料。
公众号:良许Linux