`
abruzzi
  • 浏览: 452979 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
阅读更多

前言

关于graphviz的介绍,我前面已经有专门的一篇文章了:http://abruzzi.iteye.com/blog/429042  ,还没有接触过的可以去看一看。

 

基本概念

计算机科学中的数据结构中,图算是最为复杂的一种数据结构了,图G由顶点(vertex),以及连接这些顶点的边(edge)组成,表示为G(V,E),其中V表示顶点的集合,E表示边的集合。图有着非常广阔的应用,如网络拓扑,函数调用结构,模拟神经网络等等。

 

graphviz中,也有对应的数据结构,如node, edge, subgraph等。一般来说,我们只需要定义好顶点,边的属性,graphviz的布局引擎可以自动完成布局工作,使得顶点的分布比较均匀,边的交叉尽可能的少。

 

如下图,为graphviz官方的一个图(UNIX系统的进化图):



布局方式

graphviz提供5中布局方式:

  • dot graphviz的默认布局方式,用于画有向图
  • neato spring-model(基于斥力+张力的布局)
  • twopi
  • circo 在使用过程中,感觉circo算法布局出来的图形最为合理
  • fdp

比如我另一篇文章介绍的BBMS(基于总线的消息服务) http://code.google.com/p/bbms/  的设计图,分别用dot和circo进行布局,效果如下:



 上图为使用dot布局的结果

 


此图为使用circo进行布局的结果,比dot的布局要漂亮一些。

 

graphviz脚本的代码如下:

 

digraph bbms{

    size="7.5,7.5";

    bbms_client1 [shape=box];

    bbms_client2 [shape=box];

    bbms_client3 [shape=box];

    bbms_client4 [shape=box];

    bus_server [shape=box, style="filled", color=".5 .7 1.0"];

    net [style="filled,dotted" color="yellow"];
    


    bbms_client1 -> bus_server [label="register", color="green"];

    bus_server -> bbms_client1 [label="notify", color="red"];


    bbms_client2 -> bus_server [label="register"];

    bus_server -> bbms_client2 [label="notify"];

    

    bbms_client3 -> net -> bus_server [label="register"];

    bus_server -> net -> bbms_client3 [label="notify"];
    

    bbms_client4 -> bus_server [label="register"];

    bus_server -> bbms_client4 [label="notify"];


}

 

使用circo画比较复杂的图,布局会更漂亮,最近在做一个基于java的图布局框架,jraph,初步目标就是可以支持dot和circo布局算法。


digraph gbbms{

	node [fontname="verdana"];

	fontname="Verdana";

	size="8,8";

	subgraph busmgr{

		node [shape=box, color=blue];

		label="BUS Manager";

		BUS -> Daemon_Thread [label="Worker Thread"];

	}


	subgraph bbmsclient1{

		node [shape=box, color=red];

		color=blue;

		label="BBMS Client \#1";

		notifiableEntry_1 -> Message_1_1;

		notifiableEntry_1 -> Message_1_2;

		notifiableEntry_1 -> Message_1_3;


	}


	subgraph bbmsclient2{

		node [shape=box, color=grey];

		label="BBMS Client \#2";

		notifiableEntry_2 -> Message_2_1;

		notifiableEntry_2 -> Message_2_2;

		notifiableEntry_2 -> Message_2_3;

	}


	notifiableEntry_1 -> BUS [color=green, label="register"];

	notifiableEntry_2 -> BUS [color=green, label="register"];

	BUS -> notifiableEntry_1 [color=red, label="notify"];

	BUS -> notifiableEntry_2 [color=red, label="notify"];

}

 

从上面的图中可能会得出dot布局的结果不如circo的结论,其实不然,dot只是不适用于这个图而已,dot的布局也是非常漂亮的,比如:

 


这时,如果使用circo,结果就会乱掉,如下:


 

 

总结

graphviz的好处在于,你只需要关心数据结构的流程,或者连接的方式,而不需要考虑布局。这是经典的*nix的程序的工作方式,比如latex, mate等等,都是采用这种方式来工作的。既可以达到WYTIWYG(What you think is what you get),而不是微软所提倡的WYSIWYG(What you see is what you get).

 

  • 大小: 19.1 KB
  • 大小: 23.7 KB
  • 大小: 22 KB
  • 大小: 62.7 KB
  • 大小: 8 KB
  • 大小: 29.3 KB
分享到:
评论

相关推荐

    graphviz-2.8画图工具

    Graphviz是一款强大的开源图形绘制工具,它以"dot"语言为支撑,被广泛应用于数据可视化、流程图、控制流图等多个领域。...通过学习和掌握dot语言及Graphviz的使用,你将能够更有效地表达和理解复杂的信息结构。

    dotpgstmt.sh

    1.打印查询树或计划树 # set client_min_messages to log; # set debug_print_parse to on; # select * from t; LOG: parse tree: DETAIL: {QUERY ... ...2.把DETAIL:之后的内容写入文件parse 3.绘图 ./dotpgstmt.sh ...

    graphviz-2.8画图工具.exe

    graphviz的确是个不错的工具,可是对于要求精细的手动画图来说,其功能弱了一些,他采用了算法确定图形如何调整layout,但是没有允许一定程度的客户自定义,比如该工具在表现循环图的时候会自动发现循环并且进行循环...

    graphviz-2.30.1.zip

    这个"graphviz-2.30.1.zip"压缩包提供了软件的安装和使用说明,对于需要绘制图形或集成图形生成功能到自己项目中的用户来说,是非常有价值的资源。无论是初学者还是专业人士,都能从中受益,提升自己的图形表示能力...

    graphviz-2.38.rar

    此外,Graphviz还可以与其他编程语言如Python、R结合使用,通过API接口进行程序化控制,实现图形的自动化生成。 总的来说,Graphviz是深度学习和其他领域中不可或缺的可视化工具,它的强大功能和灵活性使得用户能够...

    GraphViz使用

    4. **画图引擎**:GraphViz提供了多种布局算法,如`neato`, `dot`, `circo`, `fdp`等。不同的引擎会根据图形结构和权重选择最佳的布局方式。例如,`dot`引擎适合层次结构明显的图,而`neato`则更适合复杂网络。 5. ...

    Idea插件PlantUML和配套工具Windows版本Graphviz-2.38.zip

    Idea插件PlantUML和配套工具Windows版本Graphviz-2.38; 安装步骤: 1、Idea离线安装PlantUML插件,新建的.puml文件无法显示UML图; 2、在系统盘安装Graphviz-2.38,配置环境变量,之后.puml文件就能正确显示UML...

    graphviz-2.38.zip

    安装Graphviz后,为了让Python能够正确识别并使用它,需要将Graphviz的可执行文件路径添加到系统的环境变量中。环境变量是一个操作系统用来确定程序运行所需的配置信息的变量,这里特别指定了"dot.exe",它是...

    graphviz-install-2.44.1-win64.exe

    graphviz-install-2.44.1-64.exe代码画图软件

    graphviz稳定版

    标题提到的是"graphviz稳定版",这意味着它是经过充分测试并被认为在功能和性能上都相对稳定的版本,适合大多数用户日常使用。 在描述中,提到了"win10上直接安装就可以",这表明Graphviz已经优化了对Windows 10...

    graphviz-install-2.44.1-win64.rar

    如果是networkx,也需要先安装它,使用命令`pip install networkx`,然后可能还需要安装一个名为`graphviz`的Python绑定,同样使用`pip install graphviz`。 4. 安装完成后,你可以通过Python代码来生成图形。例如...

    本体开发软件和graphviz插件

    Protege是广泛使用的开源本体编辑器,而Graphviz则是一个强大的图形可视化软件,常用于绘制本体结构图。 Protege 3.1是该系列的一个版本,它提供了一个用户友好的界面,让用户能够创建、编辑和管理本体。这个工具...

    graphviz-api-1.0.jar

    在eclipse中导入jar包后,可以在eclipse中画图,非常方便

    idea PlantUML插件以及PlantUML画图需要生成图片的软件Graphviz

    idea 插件 使用PlantUML快速绘图,包含idea需要的PlantUML插件以及Graphviz windows的安装包 使用参考https://blog.csdn.net/zxc123e/article/details/71837923

    2017_09_02-GraphViz使用.pdf

    GraphViz使用 1 1 graphViz 1 1.1 无向图 1 1.2 带标签加权无向图 1 1.3 有向图 2 1.3.1 画图引擎 2 1.4 标注路径 3 1.5 子图 3 1.6 大型图形:rank=same对齐 4 1.7 UML元素 5 1.7.1 node[..],edge[..]设置节点、连线...

    graphviz-2.30.1

    一款画图的好工具,可以画数据结构图,流程图,树等!

    graphviz-java-api.zip_Dot._graphviz java

    java可以直接调用这个类实现画图功能,但是使用这个类的前提是你的电脑已经装了GraphViz软件,你可以在http://www.graphviz.org/Gallery.php下载windows版本,装完后,找到dot.exe所在的路径,

    stable_windows_10_cmake_Release_x64_graphviz-inst.exe

    graphviz在win下的安装包,安装的时候记得勾选加入系统全局变量的选项,这样在python程序中才会被调用成功

    正则式转NFA,DFA,MFA.zip

    C++实现正则表达式转NFA->DFA->MFA控制台输出并形成文件、画图,画图所选第三方库为Graphviz,文件中已包含,运行前请先阅读文件中的README.txt,压缩包中包含视频演示。集成平台:VS 2017,点击sln文件可以直接运行

Global site tag (gtag.js) - Google Analytics