Graphviz使用简介(中文乱码的问题)

Graphviz使用简介

graphviz是基于dot语言的绘图工具,可以画有向图、无向图、关系图、目录图、流程图等。具体作用可见它的官方网站

一些参考的网址:

http://www.open-open.com/lib/view/open1455954987933.html

https://www.oschina.net/question/129540_79958

http://blog.csdn.net/xiajian2010/article/details/23748557

如果想更进一步,直接上官网:http://www.graphviz.org/Documentation.php

dot draws directed graphs as hierarchies. It runs as a command line program,
web visualization service, or with a compatible graphical interface.
Its features include well-tuned layout algorithms for placing nodes and edge
splines, edge labels, “record” shapes with “ports” for drawing data structures;
cluster layouts; and an underlying file language for stream-oriented
graph tools.

正如上面所提到的,Graphviz是门基于dot语言的绘图工具,也就是说它不是使用鼠标来画图的,而是通过dot这种描述语言来做的,然后在命令行下使用命令生成对应的图片,这样做的优点是不用去手功的对齐坐标,而且也可以做为一些可视化的解决方案,但是它的缺点同样是显著的:无法对每一个元素的位置进行很详细的控制。这里就存在一个取舍问题了。像我这种就用来画画流程图的人来说,已经够用了,而且要比visio那种工具更好用。

DOT语言由三个对象组成grahps,nodes,edges,这与离散数学中的图的定义是一个概念。下面是个具体的例子,第一行是图名与类型,其于的就是创建nodes,edges,或者subgraphs。在要创建的这些对象中,它们的名字与属性可以是 C identifiers,数字,或者是quoted C string, 引号的作用主要是为了在名字与属性中可以带空白符与标点符号。

例子:

在命令行使用如下命令

dot -Tpng example.dot -o example.png

-T的意思是生成的文件是png格式的,example.dot是代码所在文件,-o指定生成的文件名。运行成功后将会类似如下的图。

digraph G{
edge [fontname="NSimSun"];
node [ fontname="NSimSun" size="15,15"];
{
main -> parse -> execute;
main -> init; main -> cleanup;
execute -> make_string;
execute -> printf;
init -> make_string;
main -> printf;
execute -> compare;
}

}

显示图形:

node将在它第一次出现时建立,当多个node使用操作符”->”来联接时,边将自动被创建。

如果想让边带有文字,如下图,可以使用类似如下语句

main->parse[label=”abc”];

下面是一个比较复杂的例子:

digraph G {
edge [fontname="FangSong"];
node [shape=box, fontname="FangSong" size="20,20"];
{
Lexical_Analyzer [label="词法分析器"];
Syntax_Analyzer [label="语法分析器"  ];
Semantic_Analyzer [label="语义分析"   ];
Intermediate_Code_Generator [label="中间代码生成器" ];
Machine_Independent_Code_Optimizer [label="机器无关代码优化器"   ];
Code_Generator [label="代码生成器" ];
Machine_Dependent_Code_Optimizer [label="机器相关代码优化器"  ];
}
node[shape=plaintext, fontname="KaiTi" ]{
character_stream [label="字符流"];
target_machine_code [label="目标机器语言" ];
}character_stream ->Lexical_Analyzer;
Lexical_Analyzer ->Syntax_Analyzer [label="符号流"];
Syntax_Analyzer  ->Semantic_Analyzer  [label="语法树"];
Semantic_Analyzer  ->Intermediate_Code_Generator  [label="语法树"] ;
Intermediate_Code_Generator->Machine_Independent_Code_Optimizer  [label="中间表示形式"];
Machine_Independent_Code_Optimizer  ->Code_Generator  [label="中间表示形式"];
Code_Generator ->Machine_Dependent_Code_Optimizer [label="目标机器语言"];
Machine_Dependent_Code_Optimizer->target_machine_code ;
}

一个简单的例子:

digraph directed {
edge [fontname="FangSong"];
{
    a -> b;
    a -> c -> d [color=red,penwidth=3.0];
    c -> e[label="叶子"];
}
}

这里要注意的是中文问题,graphviz默认设置下是不支持中文,如果在dot文件中直接写中文,会显示成乱码,要解决这个问题要做两件事,

1、把源文件保存为UTF-8的格式
2、设置fontname,也就是红色的部分,

如果想更深入的了解graphviz,可以去它的官方网站看一下相关文档,里面还有一些paper,如果感兴趣的话也可以看看,其实graphviz还用到了编译原理的知识,只是没有什么创新所以也就没有重点说了,但从这可见编译原理的重要性。

1、windows系统中文字体的英文名

新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑体:Microsoft YaHei

更详细的资料见:http://www.yale.edu/chinesemac/pages/fonts.html

时间: 2024-08-27 22:49:05

Graphviz使用简介(中文乱码的问题)的相关文章

graphviz画图与中文乱码等问题总结

最近想写一些文档,画一些程序的逻辑图,用了vision,markdown等软件感觉不怎么好用,于是找到graphviz,这款强大的软件.下面介绍一些入门,还有自己在用的过程中遇到的问题 1.中文乱码的问题. 采用graphviz.exe的界面编写好图形语句之后生成图片中文文字显示都没问题,当关闭.gv文件之后再打开.gv文件那么原来里面的中文就会出现乱码.在网上搜到一个解决的办法,重新设定中文自定即: 找到安装路径在 C:\Program Files\Graphviz 2.21\etc\font

graphviz 决策树绘图中文乱码解决方法

1.修改graphviz配置文件 <dir>C:\WINDOWS\Fonts</dir> 更改为 <dir>~/.fonts</dir> 2.将决策树dot_data文件保存下来 from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split import pandas as pd wine

Oracle数据库中文乱码问题

最近碰到Oracle乱码问题,刚开始甚是头疼,以前在合肥出差的时候,这种问题也碰到过,当时直接抛给了“乌压压一片”(一个搞数据的同事儿),这次没办法躲过,只好硬着头皮上.虽然我这次碰到的是Oracle乱码问题中的一个,但是我决定将这个乱码问题整理清楚(不整清楚,就觉得身边有个定时炸弹,怕下次整数据库的时候会突然又爆炸). 解决这个问题的关键在于理解字符集的概念,所以在正文开始之前,有必要先提一下字符集的相关知识!(这部分知识,对于解决j2ee中文参数传递过程中出现的乱码,也非常具有参考意义) 一

解决springmvc+mybatis+mysql中文乱码问题【转】

这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文出现乱码 最初在mybatis配置如下 <select id="queryContentById" resultType = "java.lang.String" parameterType="String" >     select t

javaEE:day2-servlet生命周期、提交解决中文乱码、tomcat加载jar包或类文件的顺序

servlet生命周期 生命周期简介: servlet在服务器第一次被请求的时候new出来,并初始化(即init())再调用service方法.这个实在服务器中new出来,然后用HashMap加的,与客户端无关.客户端之后访问只调用这个servlet的service方法. 具体分为4步: 1 构造方法 :服务器在被客户端第一次请求的时候运行 仅在服务器中运行一次 2 init方法:客户端第一次访问服务器的时候在服务器中进行初始化 仅一次.并且可以通过config参数在 web.xml中通过(ke

jsp中文乱码解决办法

一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考. 一.JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码: <html>< head>< title>JSP的中文处理</title> < meta http-equiv="Content-Type" con

JspSmartUpload中文乱码问题解决

JspSmartUpload简介 jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中. 中文乱码问题 上网查了下很多方法,但还是乱码.被中文乱码虐了一整天,最后才弄好了,写下博客记录下[第一次写博客,可能有许多问题,还请见谅!]. 一开始,我的数据库是用MySQL,UTF-8编码.用MyEclipse开发项目,用的也是UTF-8,修改了很多遍编码格式还是不行. 我的解决办法是将jsp页面的编码改为gb2312,就好了. 这里注意几点:

Linux下用freetds连接mssql中文乱码的问题【参考1】

由于工作原因我们需要通过php访问我们以前的Sql Server 2005数据,所以就有了这篇文章的诞生.废话就少说了,做程序设计的最不喜欢兜圈子了.用简介步骤说明问题,往下看.系统:   Linux数据库: Sql Server 2005 1.下载FreeTDS  官方网站:http://www.freetds.org  2.安装FreeTDS# tar zxvf freetds-current.tgz(解压)# ./configure --prefix=/usr/local/freetds

cmder 常用配置(包括默认管理员运行和解决中文乱码)

简介 cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令. 下载 官网地址:http://cmder.net/ 下载的时候,会有两个版本,分别是mini与full版:唯一的差别在于有没有内建msysgit工具,这是Git for Windows的标准配备:全安装版 cmder 自带了 msysgit, 压缩包 23M, 除了 git 本身这个命令之外, 里面可以使用大量的 linux 命令:比如 grep, curl(没有