我们程序员在工作和生活中的很多场合都需要画图表,比如PPT中的图表,学习笔记的一些助记图,工作图片中最常用的流程。在Window下,我们有很多有用的工具,比如Visio、EA等等。这些软件也都非常好用,但是都有一个缺点就是太复杂了。我们需要一定的美术基础和大量的软件操作才能画出一个非常简单的流程图。更何况,一旦需求发生变化,修改起来就非常困难,而且往往牵一发而动全身。所以良墟每每听到需求变动的时候,都觉得背脊发凉……后来在大神的介绍下,良墟才开始使用神器。这个神器不需要你懂美术,也不需要懂软件操作。绘图的过程类似于编写软件的过程。仅仅几行代码就可以表达你心中的想法。而且,排版不用愁,修改不用愁,连鼠标都不用,也能做出相当漂亮的作品!这个神器就是:点命令!这个神器还有一个图形界面版本叫Graphviz,不过梁旭习惯了命令行,一般都是在命令行下完成的。我们先来看看它能做什么。以下图片选自其官网:这些只是其中的一部分。更多图片可以去其官网查看:http://www.graphviz.org这个软件非常强大。掌握好了,就可以画出非常好看的作品,也不怕产品经理改需求。但是,在大多数情况下,我们并不需要使用它的高级功能,往往一些非常基础的功能就可以满足我们80%以上的工作需求。这个软件的安装非常简单,只需要执行下面的命令:sudoaptinstallgraphviz稍等一下,就安装成功了。然后,就可以开心的玩了~先来看一个Helloworld级别的作品。首先在任意位置创建一个test.dot文件(当然也可以叫别的名字),文件内容如下:graphg{"Hello"--"world"}然后,执行如下命令:点-Tpng-o测试。pngtest.dot后,在当前目录下生成最简单的下图。是不是很简单?下面简单介绍一下DOT命令的语法。test.dot文件中的graph表示该图是无向的,即连接线没有箭头。与之对应的是digraph,意思是有向图,连接线带有箭头。图片的描述在{}中进行,也支持评论。注释风格与C语言类似,//用于单行注释,/**/用于多行注释。如前所述,点命令非常强大。这里我们只介绍它的一些最基本的用法。学会这些最基本的命令后,你就可以应对80%左右的工作了。更高级的用法,请参考其官网。节点类似于脚本语言,节点可以不声明直接使用。对于一个节点,我们一般设置它的如下属性:shapeshapelabellabelstyletype,fillornon-fillcolorlinecolorfillcolorfillcolor这些属性设置在节点后的一对方括号[]中。很多情况下,我们的节点属性是完全一样的,那么我们可以定义一个节点并设置它,那么图中所有的节点属性都和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"]//设置样式、颜色、标签b:se->c:w[headlabel="end",taillabel="start"]//设置边fromb从c的“东南”开始,从c的“西”结束,设置label{c,f}->{d,e}[label="multi-lines",decorate=true]//这样可以同时画出多条边}GraphDOT语言可以描述两种图:无向图和有向图,graph标识无向图,digraph标识有向图。对于图的属性设置,常用的有:sizesizelabellabellabeloc标签位置,通常设置为t(top),或b(bottom)labeljust标签对齐方式,如左对齐、右对齐、居中等.bgcolorbackgroundrankdir布局的颜色,比如从左到右,或者从上到下。图也可以包含子图,子图必须以cluster开头。比如官网首页的图,也就是本文的第一张图,就包含了子图。其源码如下:digraphgraph_settings{start[shape="Mdiamond"]end[shape="Msquare"]subgraphcluster_sub1{label="process#1"labelloc="t"bgcolor="gray55"node[style="filled",color="white"]a0->a1->a2->a3->a0}子图cluster_sub2{label="process#2"labelloc="t"color="blue"node[style="filled",color="black",fillcolor="gray55"]b0->b1->b2->b3}开始->{a0,b0}a1->b3b2->a3{a3,b3}->结束}总结使用dot命令进行绘图非常方便灵活。对于设计新手来说,简直不要太方便!它的功能非常强大。本文介绍的是一些非常常用但又非常实用的基本功能。掌握这些功能可以应对工作中的大部分场景。但如果你想做出更炫酷的效果,就需要仔细研究其官网的资料了。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
