流程图(Flowchart)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bendanban/article/details/53374802

简介

到底如何画流程图呢?用PowerPoint么?Viso?好像都很难满足自己的需求。本文介绍一种比较“专业”的流程图生成方式— 使用dot语言来制作流程图。


准备工作

首先请确保你已经安装了Graphviz,如果没有安装请移步 http://www.graphviz.org/Download_windows.php

注意到,Graphviz支持windows和linux,所以不用担心平台的问题。

Graphviz包含了若干软件,我们下面的例子都用的是Graphviz里的dot这个软件。


从一个例子开始

一个简单的流程图的例子如下:

digraph F {
    rankdir = LR;
    edge [style=solid];
    node [style=filled, font=Courier];

    subgraph M {
        rank = same;
        Start [label = "Lamp doesn't work", shape = box, color = coral];
        End   [label = "Repair lamp"      , shape = box, color = coral];

        Con1 [label = "Lamp plugged in?", shape = diamond, color = green, size = 3];
        Con2 [label = "Bulb burned out?", shape = diamond, color = green, size = 3];
    }

    subgraph C {
        rank = same;
        RB [label = "Replace bulb", shape = box, color = deepskyblue1];
        AP [label = "Plug in lamp", shape = box, color = deepskyblue1];
    }

    Start -> Con1;
    Con1 -> AP   [label = "No"];
    Con1 -> Con2 [label = "Yes"];

    Con2 -> RB  [label = "Yes"];
    Con2 -> End [label = "No"];
}

将上面的内容保存到一个文本文件中,最好以dot为后缀保存,这里我将他保存成“flow.dot”
打开cmd(Windows)或者terminal(Linux),试下dot是否已经添加到了环境搜索路径里。如果没有找到dot命令,自行添加到环境路径中,如果你不愿意把环境路径搞的很长,特别是在Windows下的时候。可以弄个快捷键到系统的环境路径中。

dot就绪以后,执行如下命令来生成流程图:

dot -Tpng -o flow.png flow.dot

生成的流程图如下:



实例解释

digraph F

Dot有两种graph可以花,一种是digraph—有向图,另一种是无向图(graph来表示),这两种图还可以被strict来修饰(不在这里讨论)。

rankdir = "LR";

这个是用来描述graph是从什么哪里到哪里画,LR就是从左到右(left to right),另外还有 “TB”, “BT”, “RL”三个绘制方向。

edge [style=solid];
node [style=filled, font=Courier];

edge和node是两个关键字,他们放在最上面可以用来统一限制node和edge的属性。node和edge的属性值分别放到一个中括号里,用key=value的形式给出,多个key用逗号隔开。

subgraph M

subgraph 定义一个子图。

rank = same;

指定当前子图中的node要在同一个rank上,例如,你的graph的rankdir是从左到右的,当前subgraph中的node很可能会被放在同一列上。

Start [label = "Lamp doesn't work", shape = box, color = coral];
End   [label = "Repair lamp"      , shape = box, color = coral];

Con1 [label = "Lamp plugged in?", shape = diamond, color = green, size = 3];
Con2 [label = "Bulb burned out?", shape = diamond, color = green, size = 3];

定义当前subgraph中的node

Start -> Con1;
Con1 -> AP   [label = "No"];
Con1 -> Con2 [label = "Yes"];

Con2 -> RB  [label = "Yes"];
Con2 -> End [label = "No"];

定义edge。edge的定义是通过node之间的关系来定义的,用->来表示从哪里到哪里的edge。


参考链接与拓展阅读

  1. http://www.graphviz.org
  2. https://en.wikipedia.org/wiki/Graph_drawing
  3. http://reference.wolfram.com/language/tutorial/GraphDrawingIntroduction.html
  4. http://reference.wolfram.com/language/ref/GraphPlot.html

读一下wikipedia的介绍你会发现这竟然是个Research topic!!!在wikipedia的引用链接中也有很多有趣的工具,可以看看。

猜你喜欢

转载自blog.csdn.net/bendanban/article/details/53374802