在学习离散数学“关系”一章时,需要画一个关系图,放到博客中。手画太麻烦,在群友致远的帮助下,找到了这个软件:graphviz,它可以用命令行的方式,生成美观的关系图。
官网:http://www.graphviz.org 下载:http://www.graphviz.org/Download_windows.php,大约57.6M 一些文档
graphviz中包含一种名为dot
的语言,专门用来定义关系。我们必须先在某个文件中写上代码,最后调用命令行生成。没有找到可边写边改的集成环境。
关于dot的具体语法参看官方文档,这里就不多说。这里仅用来入门。
从集合A到集合B的关系,代码如下。
digraph G {
{a b c} -> {d e f}
}
保存在simple.gr文件中(文件名任选)。
### 生成图片
命令行
dot -Tpng -o simple.png simple.gr
读取simple.gr文件,以png格式将生成的图像保存到simple.png文件中
### 效果图
[](/user_images/1745-1.png)
## 带中文的复杂例子
graphviz默认情况下对中文支持不好,如果代码中有中文,则必须使用UTF-8的格式保存文件,并且在代码中指定字体。
### 代码
把下列代码保存在`1.txt`文件中。
digraph G {
edge[fontname = "STHUPO"];
node[peripheries= 2 , fontname = "STHUPO"]
size= "16,16";
main[shape = box]; //标记
main[label = "从这里开始"]
main-> parse [weight = 8]
parse-> execute;
main-> init [style = dotted];
main-> cleanup;
execute-> {make_string;printf;}
edge[color = red];
init-> make_string[label = "1000次的感动"];
main-> printf[label = "make a \n string"];
node[shape = box,style = filled, color = ".7 .3 1.0"];
execute-> compare;
}
注意一定要保存为`UTF-8`的格式,否则里面的中文会变成乱码!
还要注意里面有一行用来指定字体名,否则也无法正常显示中文:
node[peripheries= 2 , fontname = "STHUPO"]
### 生成图片
命令行:
dot -Tpng -o 1.png 1.txt
表示使用文件1.txt
中的指令,以png
格式,把生成的图像写到1.png
这个文件中。
这里的中文有点难看,下面修正它。
将上例中的字体换一个,比如微软雅黑,效果如下:
果然不一样了。