python graphviz中文乱码_Graphviz使用简介(中文乱码的问题)

Graphviz使用简介

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

一些参考的网址:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值