我们程序员在工作和生活中的很多场合都需要画图表,比如PPT中的图表,学习笔记的一些助记图,工作图片中最常用的流程。在Window下,我们有很多有用的工具,比如Visio、EA等等。这些软件也都非常好用,但是都有一个缺点就是太复杂了。我们需要一定的美术基础和大量的软件操作才能画出一个非常简单的流程图。更何况,一旦需求发生变化,修改起来就非常困难,而且往往牵一发而动全身。所以良墟每每听到需求变动的时候,都觉得背脊发凉……后来在大神的介绍下,良墟才开始使用神器。这个神器不需要你懂美术,也不需要懂软件操作。绘图的过程类似于编写软件的过程。仅仅几行代码就可以表达你心中的想法。而且,排版不用愁,修改不用愁,连鼠标都不用,也能做出相当精美的作品!这个神器就是:点命令!这个神器还有一个图形界面版本叫Graphviz,不过良旭习惯了命令行,一般都是在命令行下完成的。我们先来看看它能做什么。以下图片选自其官网:这些只是其中的一部分,更多图片可以在其官网查看:http://www.graphviz.org。这个软件非常强大。掌握得好,可以画出非常漂亮的作品,也不怕产品经理改需求。但是,在大多数情况下,我们并不需要使用它的高级功能,往往一些非常基础的功能就可以满足我们80%以上的工作需求。这个软件的安装非常简单,只需要执行以下命令:sudoaptinstallgraphviz稍等片刻,就安装成功了。然后,就可以开心的玩了~先来看一个Helloworld级别的作品。首先在任意位置创建一个test.dot文件(当然也可以叫别的名字),文件内容如下:graphg{"Hello"--"world"}然后,执行如下命令:dot-Tpng-otest.pngtest。点后,在当前目录下生成最简单的下图。是不是很简单?下面简单介绍一下DOT命令的语法。test.dot文件中的graph表示该图是无向的,即连接线没有箭头。与之对应的是digraph,意思是有向图,连接线带有箭头。图片的描述在{}中进行,也支持评论。注释风格与C语言类似,//用于单行注释,/**/用于多行注释。如前所述,点命令非常强大。这里我们只介绍它的一些最基本的用法。学会这些最基本的命令后,你就可以应对80%左右的工作了。更高级的用法,请参考其官网。节点类似于脚本语言,节点可以不声明直接使用。对于一个节点,我们一般设置它的如下属性:shapeshapelabellabelstyletype,filledornotfilledcolorlinecolorfillcolorfillcolor这些属性设置在节点后面的一对方括号[]中。很多情况下,我们的节点属性是完全一样的,那么我们可以定义一个节点并设置它,那么图中所有的节点属性都和node一样了。如果一个节点想要特别,单独设置即可。graphg{node[shape="box",style="filled",color="red",fillcolor="green"]//设置节点的默认形状、类型、颜色、填充颜色a[shape="ellipse",fillcolor="yellow",label="Hello"]//单独设置一个节点b[label="world"]a--ba--c//不设置c,使用默认属性d[shape="circle",label="cicle"]//d单独设置属性c--d}连接线连接线根据有无箭头分为有向边和无向边。其常用属性如下:样式类型、实线或虚线颜色连接线颜色标签标签labelfontcolor标签字体颜色headlabel开始标签内容taillabel结束标签内容decorate标签和连接线有连接线可以设置开始和结束positions,用e,s,w,n分别代表east,west,north,或者组合,具体可以参考下面的例子。与节点类似,连接线也可以设置默认属性,用边表示。如果不使用默认属性,也可以自定义属性。digraphedge_settings{edge[color="green",decorate=false]//设置边节点的默认属性[shape="polygon",sides=4,color="blue"]a->b[style="dotted",color="red",label="atob"]//设置样式、颜色、labelb:se->c:w[headlabel="end",taillabel="start"]//设置从"southeast"开始的边"ofb从"开始,从c的"西边"结束,设置label{c,f}->{d,e}[label="multi-lines",decorate=true]为起点和终点pointoftheedge此方法同时绘制多条边}GraphDOT语言可以描述两种图:无向图和有向图,graph标识无向图,digraph标识有向图。对于图的属性设置,以下是常用的:sizesizelabellabellabeloc标签位置,一般设置为t(top),或b(bottom)从左到右,或从上到下。图can还包含子图,子图必须以cluster作为前缀。比如官网首页的图片,也就是本文的第一张图片,里面就包含了子图。其源码如下:",color="white"]a0->a1->a2->a3->a0}subgraphcluster_sub2{label="process#2"labeloc="t"color="blue"node[style="filled",color="black",fillcolor="gray55"]b0->b1->b2->b3}start->{a0,b0}a1->b3b2->a3{a3,b3}->end}总结使用点命令绘制非常方便灵活。对于设计菜鸟来说简直不要太方便!它的功能非常强大。只是很常用,还有一些很实用的基础功能。掌握这些功能可以应对工作中的大部分场景。但如果你想做出更炫酷的效果,就需要仔细研究其官网的资料了。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
