GraphViz 绘制图形入门

GraphViz 绘制图形入门DOT,GraphViz简介DOT是一种文本图形描述语言。DOT语言文件通常具有.gv或是.dot的文件扩展名。在编写好DOT文件之后,需要有专门的程序处理这些文件并将其渲染成为图片,dot就是其中一款程序,它可以将DOT语言描述的图形渲染成GIF,PNG,SVG,PDF等多种格式文件。GraphViz是一个开源软件包,提供可以运行DOT文件的dot程序。Graphviz中包含了众多的布局器:dot,默认布局方式,主要用于有向图neato,基于s

大家好,欢迎来到IT知识分享网。

DOT, GraphViz 简介

  1. DOT 是一种文本图形描述语言。DOT 语言文件通常具有 .gv 或是 .dot 的文件扩展名。在编写好 DOT 文件之后,需要有专门的程序处理这些文件并将其渲染成为图片,dot 就是其中一款程序,它可以将 DOT 语言描述的图形渲染成 GIF,PNG,SVG,PDF 等多种格式文件。
  2. GraphViz 是一个开源软件包,提供可以运行 DOT 文件的 dot 程序。Graphviz 中包含了众多的布局器:
  • dot, 默认布局方式,主要用于有向图
  • neato, 基于 spring-model (又称 force-based )算法
  • twopi, 径向布局
  • circo, 圆环布局
  • fdp, 用于无向图

基本用法,以下语句绘制一个简单的有向图:

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

运行命令行 dot -Tsvg graphviz_example_1.dot -o graphviz_example_1.svg,上面的代码得到以下结果:

GraphViz 绘制图形入门

示例

  • 强调一条路径
graph {
    rankdir=LR;
    a -- b -- d -- c -- f[color=red,penwidth=3.0];
    b -- c;
    d -- e;
    e -- f;
    a -- d;
}
GraphViz 绘制图形入门
  • 聚集子图
digraph {
    subgraph cluster_0 {
        label="聚集子图 1";
        a -> b;
        b -> c;
    }

    subgraph cluster_1 {
        label="聚集子图 2";
        a -> f;
        f -> c;
    }
}

需要注意的是,子图的名称前缀必须为 cluter 才可以显示边框及 label。

GraphViz 绘制图形入门
  • 自动机
digraph finite_state_machine {
	rankdir=LR;
	size="8,5"
	node [shape = doublecircle]; LR_0 LR_4;
	node [shape = circle];
	LR_0 -> LR_2 [ label = "SS(B)" ];
	LR_0 -> LR_1 [ label = "SS(S)" ];
	LR_2 -> LR_6 [ label = "SS(b)" ];
	LR_2 -> LR_5 [ label = "SS(a)" ];
	LR_2 -> LR_4 [ label = "S(A)" ];
	LR_5 -> LR_5 [ label = "S(a)" ];
	LR_6 -> LR_6 [ label = "S(b)" ];
	LR_6 -> LR_5 [ label = "S(a)" ];
}
GraphViz 绘制图形入门

DOT 语法

结点或者边都可以通过语法 (node|edge) attr_list 指定属性列表 attr_list,比如文字字体 family、大小、结点形状、箭头形状、箭头起始位置等等。关于属性的选择可以参考官方文档 https://www.graphviz.org/doc/info/attrs.html

digraph {
  Tinos [ fontname="Tinos" ];
  Handlee [ fontname="Handlee" ];
  "Sedgwick Ave" [ fontname="Sedgwick Ave" ];
  "*also Sedgwick*";
}

Graph 属性

  • label="Simple_Graph" 为图加 label
  • rankdir=LR 图结构从左往右,默认 TB (top-bottom)
  • splines="line" 强制直边,不要弯曲边

Edge 属性

  • graph 画无向图,diagraph 有向图
  • 在边上可以指定属性,比如 hello -> world [ color="orange", penwidth=3.0 ]; 设定着色为橙色,penwidth 加粗边

Others

  • 小技巧:有时候当结点及边过多,结点的上下或者左右顺序发生变化,我们可能添加隐形的边来强制它们之间关系。比如 a->b [style=invisible, dir=none];

写作主要参考

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22209.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信