Grapviz学习笔记
基本语法定义
语法格式说明
-
终端以粗体表示,非终端以 斜体表示
-
文本字符以 ’ ’ 单引号包裹
-
() 表明必须的组合
-
[] 表明可选的项目
-
| 表明可供选的值
graph : [ strict ] (graph | digraph) [ ID ] '{' stmt_list '}' stmt_list:[stmt';'stmt_list] stmt:node_stmt|edge_stmt|attr_stmt|id '=' id|subgraph attr_stmt:(graph|node|edge) attr_list attr_list:'[' [a_list] ']'[attr_list] a_list:id '=' ID[(';'|',')][a_list] edge_stmt:(node_id|subgraph) edgeRHS [attr_list] edgeRHS:edgeop(node_id|subgraph)[edgeRHS] node_stmt:node_id[attr_list] node_id:id[ port] port:':'ID[':' compass_pt]|':'compass_pt subgraph:[subgraph[ID]]'{' stmt_list'}' compass_t:(n|ne|e|se|s|sw|w|nw|c|_) node,edge,graph,diagraph,subgraph,strict都是关键字,大小写不敏感 ID 命名规则 1.字母数字下划线,不以数字开头 2.数值型的[-]?(.[0-9]+ | [0-9]+(.[0-9]*)? ); 3.双引号包裹的 4.HTMLstring 必须是xml格式 edgeop 为 -> 或者 -- Subgraphs and Clusters 1.subgraph 有三个作用 1.代表图标结构: 1.指明某些结点和边应组合在一起 2.指定有关图形组件的语义信息 3.为边提供速记 4.可以出现在 -> -- 的左边后者右边,a->{b,c} 从a点 到b,c都会创建一条边 2.设置某部分结点的属性 3.使用 cluster subgraph 将结点绘制到一个矩形中 strict 1.对于有向图,在给定的方向上只能有一条边 2.对于无向图,对于同一两个结点最多有1条边,后面的属性回覆盖前面的 cluster 1. 2.
命令行使用
基本语法
cmd [ flags ] [ input files ]
flags
-Gname[=value] :设置图形属性,默认true
-Nname[=value]:设置结点属性,默认true
-Ename[=value]:设置边属性,默认true
-Klayout:覆盖命令指定的布局,例如:dot -Kneato
== neato
.
-Tformat[:renderer[:formater]]
指定输出的格式,以及渲染器
-V:打印版本信息
-o outfile 输出文件
-O 自动命名文件
Node,Edge,Graph属性表
属性说明
- 所有属性都是以 key=value形式
- 所有属性名,属性值都是大小写敏感,除了注释
- 无向图不要使用有向图的属性
- 使用设备无关的单位:英寸,或者像素点, 一般72个像素点一英寸
- 接收C风格的字面量,例如bool类型:true,yes,非零整数, false,no,0
- 在下面表格的UsedBy列 的 E,N,G,S,C 为 edge,node,graph,subgraph,cluster
常见属性
- 通用属性
href,href
: 图像文件的引用fontcolor
:label标签的字体颜色值- 颜色取值可能为 “h,s,v” (hue,saturation,brightness,0~1的浮点值)
- 或者X11颜色名,red,white,green
- 或者#rrggbb
fontsize
:label标签类型的 size (unit:n)fontname
:字体名label
- 结尾包含 \n,\l,\r,分别对应 居中, 左,右
- \G 图像名
- \N 结点名
- \T,\H ,头结点名,尾结点名,\E
tail_node_name->head_node_name
- graph 属性
- size=“x,y” 单位:英寸, 最大的边框
- ratio=f, 高宽的比例,0~1浮点值 可选值,fill,auto,compress
- layout=egine 布局方式
- margin=f,设置外框距
- ordering=out|in
- out:以 外边(以当前结点为尾结点) 从左到右出现的顺序 定义 结点显示的顺序
- in:以 内边(以当前结点为头结点) 从左到右出现的顺序 定义 结点显示的顺序
- rotate=90 ,横屏模式,其他值不生效
- center=true,bool值 居中
- color=colorvalue 前景色
- overlap:结点间重叠发生时
- false:使用Prism算法,消除重叠
- scale:保持结点的大小,均匀放大
- true:不做重新布局
- stylesheet=“file.css” 引用css文件,只对svg,svgz生效
- splines 线条样式
- none|"" 无线条
- line|false 正常直线
- polyline 相交线
- curved 曲线
- ortho:正交
- spline ,true
- dot-specific 属性, 点布局属性
- nodesep = f, node之间最小间隔
- ranksep = f , 各个排名之间的最小间隔
- rankdir =LR|RL|BT 绘制的顺序
- rank = rankvalue ,对子图中的结点 约束排名,取值
- min,source:子图中的所有结点 最小的rank
- same :图中的所有结点 相同的rank
- max,sink:子图中的所有结点 最大的rank
- neato-specific 属性,紧凑布局
- mode:取值
- major: 最大程度压缩线长
- KK:压缩程度 梯度下降的方法
- model:取值
- 默认:最短路径
- circuit:使用电路电阻模型计算距离
- subset:长度设置为 相邻结点数
- mds:最短路径用于 没有直接相邻的边
- start=val 随机生成器,随机摆放结点位置
- epsilon:结束条件
- mode:取值
- twopi-specific attributes :星型布局
- root=ctr 布局的中央结点
- ranksep = val ,指定径向距离,默认0.75
- circo-specific attributes :环布局
- root=nodename
- mindist=value,结点间最小距离
- fdp-specific attributes :暂不写
- NodeAttribute
- height=d,width = d, fixedsize=true
- shape=builtin_polygon record epsf
- builtin_polygon ,内置多边形状
- plaintext
- ellipse
- oval
- circle
- egg
- triangle
- box
- diamond
- trapezium
- parallelogram
- house
- hexagon
- octagon
- note
- box3d
- component
- builtin_polygon ,内置多边形状
- color=colorvalue ,fillcolor=colorvalue
- 设置填充颜色, 如果 指定了style=filled
- 优先级: fillcolor > color
- style 结点的样式
- filled,solid,dashed,dotted,bold,invis
- xlabel:外部标签
- target,tooltip
- 只适用于多边形结点
- regular= true|false , 趋近于对称的正方形
- peripheries = n , 设置包围的层次
- sides = n: 多边形边数
- orientation:设置第一个顶点的方向,从垂直方向逆时针,以度表示
- distortion:扭曲度, 顶部加宽, 底部收缩
- skew:歪斜,顶部右移,底部左移
- edge attribute
- wegiht=val ,边的权值
- style=solid dashed dotted bold invis
- dir =forward back both none ,控制箭头方向
- tailclip,headclip bool,断点形状剪裁
- arrowhead,arrowtail= none, normal, inv, dot, odot, invdot, invodot, tee, empty, inv empty, open, halfopen, diamond, odiamond, box, obox, crow ,箭头形状
- arrowsize=val 指定箭头大小的乘法因子
- headlabel,taillabel=text ,头尾标签,labelfontcolor,labelfontname, labelfontsize 设定字体
- labeldistance and labelangle (in degrees CCW) specify the placement of head and tail labels.
- decorate:从边和label画一条直线
- samehead,sametail:从某个结点出发的多条线, 可以合并端点