graphviz linux教程,程序员绘图利器 — Graphviz

本文介绍了Graphviz这款开源工具,用于解析DOT语言来创建图表。DOT语言简单易学,适合程序员使用。文章通过实例展示了如何绘制无向图、有向图,并详细讲解了如何添加节点和边的属性,如颜色、形状等。此外,还展示了绘制基本图形、数据结构,如二叉树、哈希表和流程图的方法,对于理解和可视化程序流程及数据结构很有帮助。
摘要由CSDN通过智能技术生成

概述

Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具包。DOT是一种图形描述语言,非常简单的,

Graphviz就是用来处理这种语言的工具。只需要简单了解一下DOT语言,就可以用Graphviz绘图了,它对程序员特别有用。

So in short, if you are a programmer, it is born for you。

无向图

graph graphname {

a -- b -- c;

b -- d;

}

b2f6a0d07defa18fc1eac91d27c85533.png

有向图

digraph graphname {

a -> b -> c;

b -> d;

}

7b92e2e3bef6b223c9aea2b773c9da90.png

属性

//DOT语言中,可以对节点和边添加不同的属性。

digraph graphname {

//节点的属性,节点的名称

a [lable = "Foo"];

//节点的属性,节点的形状

b [shape = box];

//边的属性,边的颜色

a -> b -> c [color = blue];

//边的属性,边的线状

b -> d [style = dotted];

}

基本图形

digraph G {

//把图片的尺寸设为4inch * 4inch

size = "4,4";

main [shape = box];

//边的重要程度,默认是1

main->parse [weight = 8];

parse->execute;

//点状线

main->init[style = dotted];

main->cleanup;

//连接了两条线

execute->{make_string;printf}

init->make_string;

//把边的默认颜色设为red

edge [color = red];

main->printf [sytle=bold, label = "100times"];

//节点的名称

make_string [label = "make a\nstring"];

//设置节点的默认属性

node [shape=box,style =filled,color=lightgrey];

execute->compare;

}

48446eeebcebbd0e0308ed36109648cc.png

多边形

digraph G{

a -> b -> c;

b -> d;

/* 形状为多边形,边数为5,外框为3条,颜色为淡蓝,样式为填充 */

a [shape = polygon, sides = 5, peripheries = 3, color = lightblue, style = filled];

/* 形状为多边形,边数为4,角的倾斜度为0.4,内容为hellow world*/

c [shape = polygon, sides = 4, skew = 0.4, label = "hello world"];

/* 形状为倒三角,整体旋转30度 */

d [shape = invtriangle,orientation = 30];

/* 形状为多边形,边数为4,扭曲度为0.7 */

e [shape = polygon, sides = 4, distortion = 0.7];

}

678afaf7a276463176ce3475621aeda1.png

数据结构

(1)复杂的标签

digraph structs {

/* 把节点的默认形状设为矩形record,默认的是圆角矩形Mrecord */

node [shape = record];

struct1 [label = "left|middle|right"];

struct2 [label = "one|two"];

struct3 [label = "hello\nworld|{b|{c|d|e}|f}|g|h"];

struct1 -> struct2;

struct1 -> struct3;

}

d944560120195b92dda5c243e7668724.png

graph picture {

//这幅图的名字

label = "I love you";

//图名字的位置在bottom,也可以是t

labelloc = b;

//图名字的位置在left,也可以是r

labeljust = l;

edge[decorate = true];

C -- D [label = "s1"];

C -- E [label = "s2"];

C -- F [label = "s3"];

D -- E [label = "s4"];

D -- F [label = "s5"];

edge[decorate = false, labelfontcolor = blue, fontcolor = red];

C1 -- D1 [headlabel = "c1",taillabel = "d1",label = "c1 - d1"];

}

09a2d69cada81cb2914d06d49d0a3761.png

(2)行列对齐

digraph html {

rankdir = LR;

{

node[shape = plaintext];

1995 -> 1996 -> 1997 -> 1998 -> 1999 -> 2000 -> 2001;

}

{

node[shape = box, style = filled];

WAR3 -> Xhero -> Footman -> DOTA:

WAR3 -> Battleship;

}

{rank = same; 1996; WAR3;}

{rank = same; 1998; Xhero; Battleship;}

{rank = same; 1999; Footman;}

{rank = same; 2001; DOTA;}

}

0fc7504bde871cc765c4a81a29446e74.png

(3)二叉树

digraph G {

label = "Binary search tree";

node [shape = record];

A [label = "|A|"];

B [label = "|B|"];

C [label = "|C|"];

D [label = "|D|"];

E [label = "|E|"];

F [label = "|F|"];

G [label = "|G|"];

A:f0 -> B:f1;

A:f2 -> C:f1;

B:f0 -> D:f1;

B:f2 -> E:f1;

C:f0 -> F:f1;

C:f2 -> G:f1;

}

bbf97ee5085e35dd5b9ff8e25464c519.png

(4)哈希表

digraph G{

nodesep = .05;

rankdir = LR;

node [shape = record,width = .1,height = .1];

node0 [label = "|||||||",height = 2.5];

node [width = 1.5];

node1 [label = "{n14|719|

}"];

node2 [label = "{a1|805|

}"];

node3 [label = "{i9|718|

}"];

node4 [label = "{e5|989|

}"];

node5 [label = "{t20|959|

}"];

node6 [label = "{o15|794|

}"];

node7 [label = "{s19|659|

}"];

node0:f0 -> node1:n;

node0:f1 -> node2:n;

node0:f2 -> node3:n;

node0:f5 -> node4:n;

node0:f6 -> node5:n;

node2:p -> node6:n;

node4:p -> node7:n;

}

091d8c6303aaf88246d72a56fa71571b.png

流程图

digraph G{

subgraph cluster0 {

node [style = filled,color = white];

style = filled;

color = lightgrey;

a0 -> a1 -> a2 -> a3;

label = "process #1";

}

subgraph cluster1 {

node [style = filled];

b0 -> b1 -> b2 -> b3;

label = "process #2";

color = blue;

}

start -> a0;

start -> b0;

a1 -> b3;

b2 -> a3;

a3 -> a0;

a3 -> end;

b3 -> end;

start [shape = Mdiamond];

end [shape = Msquare];

}

9e67c88439b45a0b184e2311b75248d6.png

Reference

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值