零基础学编程029:程序员作图不用笔

现在写专业文章离不开图,有些图非常复杂但非常有规律,用PowerPoint或Visio画都很吃力,这时候会编程就轻松多了,比如下面这张状态转换图:

再比如这张数据结构图:

再比如英文小说《欺骗的女儿》中的人物关系图:

再比如这张超复杂的网络结点图:

有些图看起来简单,可能用PowerPoint画也费不了多少时间,但如果这种图需要频繁调整,那工作量可就大了去了。比如程序员经常画的流程图、类图、数据结构图等,公司里经常画的组织结构图、工作流图等。

对于这类非常有规律的图,还有一个强大的工具,它就是GraphViz。上面举的几个例图都是摘自它的官网:http://www.graphviz.org。这个GraphViz不仅仅是一个工具,而且还对应了一种画图的语言,称为DOT Language

安装与运行

到官网上点击Download链接,可以看到各种平台的下载安装包,支持Linux、Windows、Mac,我下载的是Windows平台的graphviz-2.38.msi安装包,安装过程一路默认下一步即可。完成之后,从开始菜单中找到gvedit.exe,运行它出现主界面。

Hello World

任何语言都有个Hello World,DOT Language也不例外。从File菜单中点击New,会新建一个子窗口,名称为graph1.gv,所有GraphViz的文件的扩展名都为.gv,刚才的gvEdit.exe的意思也明白了吧?

在文本编辑窗口中输入以下代码:

digraph G {
    hello -> world
}

再点击Graph菜单中的Layout,或者直接按F5键,弹出一个View窗口,一张简单的图就画出来了。

简单解释一下:

  • digraph表示有向图,是Directed Graph的缩写形式,什么是有向图?请参考《图论》
  • G是图的名称
  • 花括号{ }内是图形的描述语句
  • hello 和 world是两个节点node
  • -> 表示左边指向右边的一个边edge

类与对象图

在《零基础学编程028:面向对象编程OOP》里我画了一张图,实际上就是用GraphViz生成的。

图并不复杂,直接看代码:

digraph G {
    node[shape=box]
    Stock[style=filled]
    Stock -> {google; amazon; facebook; apple}
}

花括号内的代码就三行,记得按F5看看运行效果,解释一下:

  • node[ ... ]表示对图中的所有结点统一进行设置
  • [ ] 中设置一些属性,称为attr
  • shape=box把结点设置为矩形
  • Stock是结点的名称,由于前面已经设置了shape=box,所以也为矩形
  • stype=filled,填充的矩形
  • Stock -> {google; amazon; facebook; apple}相当于以下四句 Stock -> google Stock -> amazon Stock -> facebook Stock -> apple

小结:

  • GraphViz的语法挺简单,里面主要是结点node边edge
  • -> 表示一条有向边
  • 最复杂的是Attr,里面可以设置填充、排列、颜色、链接等等,详细内容以后再说,也可以参考官网的Documentation链接,长达N页的全英文详细说明,点击“阅读原文”慢慢看吧

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-03-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落影的专栏

OpenGLES进阶教程8-obj文件和mtl文件解析

教程 距离上一篇教程已经有两个月了,这两个月详细阅读GPUImage的源码,并写了详细解析,发现对OpenGLES的深入了解很有帮助。 上周一个简书的朋友问我...

3437
来自专栏CreateAMind

Understanding Mutual Information and its Use in InfoGAN

0-8的生成数字的变化和之前文章中出现的结果类似:beta-VAE 实验:mnist多图及代码

691
来自专栏逍遥剑客的游戏开发

MPQ 文件系统完成

1784
来自专栏逸鹏说道

Toxy新手教程

Toxy新手教程 官方网站:http://toxy.codeplex.com Toxy是干嘛用的?它是.NET平台上的文件抽取框架,主要解决各种格式的内容抽取问...

2716
来自专栏彭湖湾的编程世界

【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)

mock的由来【假】 赵师秀:南宋时期的一位前端工程师 诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安...

22711
来自专栏轮子工厂

教你用翻译软件快速阅读大量英文文献

对于一些引用的英文文献,我们需要快速地了解整篇文献讲了什么内容,来判断是否可以作为“国内外研究现状”来进行详细分析。

1114
来自专栏飞雪无情的博客

Go语言实战笔记(二十二)| Go 基准测试

基准测试,是一种测试代码性能的方法,比如你有多种不同的方案,都可以解决问题,那么到底是那种方案性能更好呢?这时候基准测试就派上用场了。

973
来自专栏深度学习自然语言处理

(LaTex)CTex的初次使用心得及入门教程

摘要 最近要发论文了,被知乎里人推荐使用论文编译软件(CTex、LaTex和Overleaf之类),瞬间感觉自己用Word简直Out了(书读少)。 学校里也听说...

4318
来自专栏吉浦迅科技

DAY31:阅读global memory

772
来自专栏生信技能树

rMATS这款差异可变剪切分析软件的使用体验

rMATS最近刚现在出了rMATS 4.0.1版,相比之间的rMATS 3.2.5版,其用C,Python,Cython重写了该软件,运算速度提升了100倍,并...

2243

扫码关注云+社区