文章目录

  • 介绍
  • 安装
  • 普通图
    • 简单画图
    • 进阶画图
    • 树状图
    • 哈希表
  • 子图
    • 定义子图
    • 子图进阶
  • 附录
    • 主要结点属性
    • 主要边属性
    • 主要图属性
    • 结点形状
    • dot语法

介绍

Graphviz是一个常用的绘图工具,可以通过编写dot脚本绘制一系列的图片,例如流程图、树形图等框架图,并使用dot命令生成图片。

安装

可以到Graphviz官网下载安装包:下载地址
安装完成后,将其安装地址的...\Graphviz2.38\bin文件夹加入环境变量

普通图

简单画图

关于Graphviz的语法我就不详细说了,网上有许多资料,我希望是通过例子来帮助大家理解如何使用。


首先你需要新建一个文本文档(txt)就行,然后打开文档,开始画图吧。
首先画一个有向图:

digraph G{}

这时候我们就定义个一个有向图,接下来我们需要在中间加入一些自定义的结点。

digraph G{a->b;b->c;a->c;
}

好了,我们已经定义好一个简单的有向图了,然后我们将其保存为deme.dot(记得要改后缀名.dot)。
接下来我们利用dot命令将其导出。
打开CMD窗口,进入该demo.dot所在目录,然后输入如下命令:
dot -Tpng demo.dot -o demo.png
我们可以看到已经生成了一个.png文件,如图所示


进阶画图

上面只是展示了如何画一个简单的图,那么,如果我想改变结点的形状,线的颜色之类的属性,如何画图呢?让我们看看下面的代码:

digraph G{a->b->c[color=red];a->c [label="a to c"];b->{d,e}  [style=dotted];a [shape=polygon,sides=5,peripheries=4,color=lightblue,style=filled];c [shape=box];d [shape=triangle,label="I am d"];
}

同样通过如下命令导出png图片:
dot -Tpng demo.dot -o demo.png

你会发现,我们修改了结点及边的属性,how?
对于每条边,只要在其后面增加一对[],里面填入需要修改的属性,而对于结点,只需要在后面增加几条语句对其定义属性就可以了,是不是很有趣?


树状图

digraph G {node [shape=record,height=.3];node0[label = "<f0> |<f1> G|<f2> "];node1[label = "<f0> |<f1> E|<f2> "];node2[label = "<f0> |<f1> B|<f2> "];node3[label = "<f0> |<f1> F|<f2> "];node4[label = "<f0> |<f1> R|<f2> "];node5[label = "<f0> |<f1> H|<f2> "];node6[label = "<f0> |<f1> Y|<f2> "];node7[label = "<f0> |<f1> A|<f2> "];node8[label = "<f0> |<f1> C|<f2> "];node0:f2 -> node4:f1;node0:f0 -> node1:f1;node1:f0 -> node2:f1;node1:f2 -> node3:f1;node2:f2 -> node8:f1;node2:f0 -> node7:f1;node4:f2 -> node6:f1;node4:f0 -> node5:f1; node [color=red,height=.1];a->b;c->d;}


可以看到,我们用它画了一个树状图,代码中是什么含义呢?

  • 首先我们定义一个node类,其下的所有结点都是record类型,并且height=0.3
  • 然后每个record结点使用HTML语法<f0>添加标签,并且利用|类似表格分隔,
  • 接下来对每个结点,我们指定它的哪一部分和下一结点的哪一部分相连。
  • 最后又定义一个node类,为a指向b
  • 为了更清晰的了解每一个node类的范围,最好用一对{}将其包围起来。

哈希表

digraph G {nodesep=.05;rankdir=LR;node [shape=record,width=.1,height=.1];node0 [label = "<f0> |<f1> |<f2> |<f3> |<f4> |<f5> |<f6> | ",height=2.5];node [width = 1.5];node1 [label = "{<n> n14 | 719 |<p> }"];node2 [label = "{<n> a1  | 805 |<p> }"];node3 [label = "{<n> i9  | 718 |<p> }"];node4 [label = "{<n> e5  | 989 |<p> }"];node5 [label = "{<n> t20 | 959 |<p> }"];node6 [label = "{<n> o15 | 794 |<p> }"];node7 [label = "{<n> s19 | 659 |<p> }"];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;}


解释一下:

  • 首先我们设定了一些属性:nodesep为,rankdir=LR(left to right为结点的方向,默认是TP(top to bottom)
  • 然后再定义了一个结点类,为左边的竖框
  • 再定义一个新的结点类,为右边的哈希结点
  • 注意到这次使用的标签不再是<f>而是换成了其他的<n>, <p>

子图

定义子图

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];
}

这时我们定义了两个子图,并且在子图中定义子图的labelcolorfilled等属性,并且在其中还定义了结点类,其中一些语句的功能,相信你看代码能够理解。


子图进阶

digraph G {compound=true;subgraph cluster0 {a -> b;a -> c;b -> d;c -> d;}subgraph cluster1 {e -> g;e -> f;}b -> f [lhead=cluster1];d -> e;c -> g [ltail=cluster0,lhead=cluster1];c -> e [ltail=cluster0];d -> h;
}


这里我们设定了compound属性,使其能够使得结点与子图相连,同时,连接线不覆盖子图,并使用ltaillhead定义连接的头尾。


附录

主要结点属性

主要边属性

主要图属性

结点形状

dot语法

Graphviz 画图教程相关推荐

  1. ggplot2画图教程

    ggplot2画图教程 ggplot2是什么? ggplot2是用于绘图的R语言扩展包,其理念根植于<Grammar of Graphics>一书.它将绘图视为一种映射,即从数学空间映射到 ...

  2. Matplotlib画图教程:在QT界面中嵌入三维图片

    Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制.因此就诞生了做这么一个小模块的想法 ...

  3. Python画图教程~海龟画图~turtle

    个人博客:https://tang2333.xyz/ Python画图教程 1.运动控制 2.画笔控制 3.控制台控制 1. 运动控制 turtle.goto(x,y) 画笔定位到坐标 turtle. ...

  4. python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图

    python的tutle画图教程? 是turtle海龟画图,import turtle调用模块 内置一些函数,可以自己依据需求加入,网上有教程的 什么,Python可以画图写报告 是的,比如matpl ...

  5. python画图大全_python画图教程

    python画图教程内容摘要 python画图教程这个方法是通过如何设置权限,郑州室内设计教程,1真品劳力士的把头.①注册微信:纹身师教程,1注册域名即是网址2申请网站空间3把要放到网上的资料做成网页 ...

  6. 【莫烦Python】Matplotlib Python画图教程

    目录 前言 1.基本使用 1.1 基本用法 1.2 figure图像 1.3 设置坐标轴1 1.4 设置坐标轴2 1.5 Legend图例 1.6 Annotation标注 1.7 tick能见度 2 ...

  7. GraphViz 使用教程-用代码生成有向图。并介绍流程图、时序图等绘图工具

    GraphViz 图形工具使用教程综合篇 GraphViz简述 GraphViz基本元素 生成一个有向图 node属性.edit属性和subgraph的使用 如何安装GraphViz GraphViz ...

  8. CAD画图教程:CAD怎么画一条指定长度的线?

    在CAD入门学习过程中,画直线是基础操作之一,所以一定要对此熟练掌握才可以.那你知道CAD怎么画一条指定长度的线吗?本节CAD画图教程就和小编一起来了解一下在浩辰CAD软件中怎么画一条指定长度的直线吧 ...

  9. 海龟画图 python禁行的交通标志_Python画图教程~海龟画图~turtle

    个人博客:https://tang2333.xyz/ Python画图教程 1.运动控制 2.画笔控制 3.控制台控制 1. 运动控制 turtle.goto(x,y) 画笔定位到坐标 turtle. ...

  10. 【莫烦Python】Matplotlib Python 画图教程 目录引导

    1.[莫烦Python]matplotlib Python画图教程 Matplotlib基本用法 2.[莫烦Python]Matplotlib Python 画图教程 figure图像 3.[莫烦Py ...

最新文章

  1. C# 语言规范_版本5.0 (第10章 类)
  2. BCI competition IV 2b简介
  3. ps4看b站 f怎么调html5,b站html5,b站怎么切换到HTML5版播放器?
  4. generator 1【矩阵快速幂】
  5. 机器学习入门(2)之模型评估与选择
  6. 后台系统应该具备的素养
  7. springboot mysql事物_springboot如何开启数据库事务
  8. Vue开发实例(03)之Vue项目引入element_ui
  9. 电信光猫桥接+ML固件路由器实现ipv6网站访问
  10. 【Love2d从青铜到王者】第一篇:Love2d入门以及安装教程
  11. web前端网页制作 小组作业(制作一个简单的小网页)
  12. 本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了
  13. 什么是GML?GML例子
  14. mfc下创建html文件,用MFC怎么创建TXT文件并写入数据
  15. Java应用DevOps工具链推荐
  16. linux中read函数读取文件夹内文件,linux下read函数
  17. 杰理之怎么区分芯片是不是烧写器烧写完后第一次运行?【篇】
  18. 电商秒杀系统设计思路和实现方法
  19. 诺基亚S60手机c盘、d盘、e盘、z盘的作用
  20. python朋友圈技巧_原创|你必须拥有的四个微信高级技巧

热门文章

  1. 5G无线关键技术 — 大规模天线技术
  2. 缅柬泰之色---彩图大串联 一 (缅甸篇)
  3. ANSYS 有限元分析 接触分析
  4. 常用的linux技巧,Linux Shell常用技巧(十二)-第二部分
  5. 机器码解除教程,逃离塔科夫机器码解除,彩虹6号机器码解除,dayz机器码解除,腐蚀rust机器码解除
  6. android 自定义字体 ttf,Android使用自定义字体的方法
  7. 如何在腾讯云学生服务器搭建个人网站——配置web开发环境详细步骤
  8. 0.1 番外篇: UML 类图
  9. 程序员的一百万种变现方式 03,努力多赚零花钱
  10. 1688API item_search_img - 按图搜索1688商品(拍立淘)