专栏名称: 苏小林
目录
相关文章推荐
旁门左道PPT  ·  PPT数据可视化,到底有多少种方式? ·  14 小时前  
界面新闻  ·  刘国梁建言WTT:取消强制参赛政策 ·  3 天前  
KnowYourself  ·  教你一个拒绝喝酒的理由(不是开车) ·  4 天前  
51好读  ›  专栏  ›  苏小林

三分钟上手数据结构作图工具graphviz

苏小林  · 掘金  ·  · 2019-09-16 15:27

正文

阅读 91

三分钟上手数据结构作图工具graphviz

graphviz数据结构作图工具应用比较广泛了,很多数据结构都可以使用gv画出来,比如常见的c语言的结构体、指针、链表等。也可以用来画流程图等常规图示,好用。

安装graphviz

mac os系统可以通过brew进行安装

brew install graphviz
复制代码

然后就可以使用dot命令行工具了,这个工具就是用来生成图片的

dot语言

graphviz从dot语言生成图形,这个dot语言的语法十分简单,没有复杂的分支判断语句,官方文档参考:graphviz.gitlab.io/_pages/doc/…

声明一个图形

比如4.gv, 包含一个"hello"的图形

digraph {
    hello
}
复制代码

然后执行dot 4.gv -Tpng -o 4.png && open 4.png生成图片,效果如下

可以看到gv默认使用椭圆解释要画的图

调整图形形状

gv支持很多的图形形状,完整列表可以参考https://www.graphviz.org/doc/info/shapes.html 按类别可以分成两类,1是正方形、圆形等几何形状,另一类是表格(Record Node)

表格(Record Node)
比如把上面"hello"这个椭圆形改成正方形,使用语法shape=box即可

digraph {
    hello [shape=box]
}
复制代码

效果如下

表格

digraph {
    hello [shape=record label="first|second|last"]
}
复制代码

效果如下

节点关系

digraph {
    node1 [shape=box]
    node2 [shape=box]
}
复制代码

下面来表示node1和node2的关系

单向 node1 -> node2

双向 node1 -> node2 node2 -> node1

无明确方向 node1 -- node2

graph {
    node1 [shape=box]
    node2 [shape=box]

    node1 -- node2
}
复制代码

注意使用无明确方向的连接线必须把图像指定成无向图:graph,一般有方向的使用有向图:digraph

案例-双向链表

digraph G {
    rankdir="RL"
    value1 [
        shape="circle"
        label="value1"
    ]
    value2 [
        shape="circle"
        label="value2"
    ]
    item1 [
        shape="record"
        label="item1|
            <f0> *next : struct item\l|
            <f1> *prev : struct item\l|
            <f2> *data : void* \l"
    ]
    item2 [
        shape="record"
        label="item2|
            <f0> *next : struct item\l|
            <f1> *prev : struct item\l|
            <f2> *data : void* \l"
    ]
    item1:f1 -> null
    item1:f0 -> item2
    item1:f2 -> value1
    item2:f1 -> item1
    item2:f0 -> null
    item2:f2 -> value2
}
复制代码







请到「今天看啥」查看全文