代码也疯狂:diagram生成流程图
在IT圈有这样一句(笑)话:任何一件需要重复两遍以上的事情,都有必要为它写一个脚本自动完成。话虽然夸张,但确实是这样的道理,事实上,在我们日常作业的许多方面其实都有"代码化"的途径,是否能掌握它取决于你有没有一颗喜欢探索的心(或者被重复性工作折磨的程度),今天我们来介绍一种神奇的命令,来使用Stata生成流程图。
老方法V.S.新方法
老方法---在word上手动点选
在word上画流程图有多麻烦,用Stata生成流程图就会有多简单。
回忆一下以前我们使用word画流程图的时候,是什么样子,我们在菜单栏、选项列表中一直不停地点点点,对于笔者这样有选择困难症和直线对齐强迫症的晚期患者来说,画一个自己满意的流程图的工作量是巨大的。
如果其中牵扯到曲线、给线旁边加说明等工作(几乎每个流程图都会遇到),那更是感觉自己沦为了低端劳动力————太LOW!
新方法---使用Stata的diagram命令
同学们,作为传说中的Stata俱乐部读者兼高级知识份子,我们需要一种足够炫、足够省事的方法规避这一问题。Stata的外部命令diagram支持将DOT(一种图形描述语言)渲染成pdf, png, jpeg, gif,bmp等格式的文件。一条命令即搞定
具体操作
01
安装
1.前往phantomJS官网下载可执行程序
地址:
https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip
将其解压完毕后,放在你的电脑中(请不要在包含中文的路径中放置)并记住路径,小编这里的路径是:C:phantomJSbinphantomjs.exe
2.下载外部命令webimage、diagram
webimage使用ssc 下载:ssc install webimage
diagram使用github 命令下载 :github install haghish/diagram
关于如何使用github安装命令,可以参考我们的往期推文:SSC的好兄弟“github”。其中,我们需要使用的是diagram命令,webimage是它的依赖命令,所以也需要一并下载。
02
迅速开始
现在我们新建一个dot1.txt文件,并在里面写上如下内容:
digraphgraph1{//声明一个图,图的所有信息在花括号内表示
a;b;c;//定义三个结点a,b,c
a->b->c->c;//定义有三个箭头,分别由a结点指向b结点,b指向c,c又指向c
}
当然,你可以在爬虫俱乐部资源共享中心找到我们提供的源文件 地址在这里 :https://github.com/Stata-Club/Sharing-Center-of-Stata-Club/blob/master/article/dot1.txt?raw=true
如果你希望迅速上手使用DOT语法绘制的图片,又不想从头了解DOT语法,可以从爬虫俱乐部资源共享中心下载一组源码包,里面包含了许多模板DOT文件,你可以从中看看有没有你需要的那款。
源码包地址:https://github.com/Stata-Club/Sharing-Center-of-Stata-Club/blob/master/article/diagram_examples.rar?raw=true
在Stata中,使用如下命令
diagram using "dot1.txt", export(dot1.png) phantomjs(C:phantomJSbinphantomjs.exe)
其中, using 后跟的是这个文件的路径, export是输出格式,phantomjs指定刚才安装的程序所在目录。
生成如下图:
是不是非常简便?寥寥两行代码,就将流程图渲染了出来。
03
更多玩法
事实上你可以将上述txt文件的内容直接在命令里写出来,只是会有点长而已:
diagram "digraph graph1 ",export(dot1.png) phantomjs(C:phantomJSbinphantomjs.exe)
如果你对于这个图形生成的形式不满意,可以使用 engine() 选项来更换渲染引擎,现在有的引擎有:
• dot
• neato
• fdp
• twopi
• circo
• osage
如果不添加engine选项,绘图使用的默认引擎是dot。
现在我们换一个引擎fdp试一试。我们还是将刚刚写好的命令复制一遍,只在最后的选项处加一个engine(),选择fdp 引擎。
diagram "digraph graph1 ",export(dot1.png) phantomjs(C:phantomJSbinphantomjs.exe) replace engine(fdp)
生成图片如下:
图片的形式虽然变了,但是含义并没有变,都是从a结点指向b结点,b结点指向c结点,毕竟它们都是从同一个DOT描述转换过来的嘛。
DOT : 图形描述语言
刚刚我们在dot1.txt文件中所写的,其实就是dot语言,它是一种图形描述语言,仅仅用于描述图形的结构。有了它,我们就可以很方便地通过编写脚本来画各种结构示意图和流程图。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
- Spring Cloud如何提供API给客户端
- 5分钟学会Spring Boot自定义属性和自动配置
- 创建一个Spring Security OAuth认证服务
- Zipkin和微服务链路跟踪
- Java8真不用再搞循环了?
- 针对事件驱动架构的Spring Cloud Stream
- Spring的三种Circuit Breaker
- Spring5以来注册Bean的各种姿势,特别最后的纯编码注册值得尝试
- ONOS一键安装脚本
- Spring 5 新增全新的reactive web框架:webflux
- 认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- 在服务器上利用docker快速部署博客—jpress
- NSQ深入与实践
- 排序算法性能比较
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现线性回归之弹性网回归
- 【原创】python倒排索引之查找包含某主题或单词的文件
- python实现逻辑回归
- Linux文件管理参考
- CloudBase Framework丨第一个 Deno 部署工具是如何打造的?
- 关于null通过+" ",String.ValueOf转换为字符串的问题!!!
- Java实现尺取法
- 【自然语言处理】利用朴素贝叶斯进行新闻分类(自己处理数据)
- mybatis文件映射之select操作返回Map
- shm进程间通信失败了!!!
- Vue3.0 beta源码学习笔记(二)
- 【自然语言处理】使用朴素贝叶斯进行语种检测
- 关于errno的后事妥善处理
- Vue3.0 beta源码学习笔记(三)
- 你会不会分布式系统进程间通信?