Graphviz绘图小记

最近在做一个动态生成各种数据表格之间的互相关联的图像的东西,过程是用程序生成dot文件,然后利用Graphviz的dot工具生成可视化的图片

其中有些对Graphviz的一些注意事项和经过多次尝试所得出的一些经验和感触,因为感觉最近脑子一直不好使,所以记录在此,以备后查。

先copy dot的绘图语法过来,

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_pt : (n | ne | e | se | s | sw | w | nw | c | _)

1) 首先,graph和digraph有很大的区别,刚开始用graph一直报错,都不知道错在哪里,后来一律改成digraph,就没再错过

2)这里 两处ID都是[a-zA-Z0-9_]构成的字符,且不以0-9开头

3)语句由 节点描述语句,边描述语句,属性描述语句,ID描述语句(??没见过),子图描述语句构成

4)属性描述,可以用来描述graph,node,edge三类的默认属性,也就是说,自这一句属性描述语句之后,的对应的graph,node或者edge都将具有这一属性并保持直到被下一句的graph,node或者edge属性覆改

其他的不讲了,可以关注官网

重点记下基于record类型的dot图形结构的语法

节点语法: "node_name" [label="<a_N> a|<b_M> b|<c_J> c\l"]

这里<a_N>中的a_N相当于是后面边所指向或者所指出的位置(port),| 管道符号,表示加一个分割线,\l 表示左对齐, \r表示右对齐

边语法: "node_name_A":a_N -> "node_name_B":b_J[label="shit"]

这里表示node_name_A这个表格中的a_N格中出一条指针指向node_name_B的b_J格,线上的注释是label表示的shit


一些可能会用到的东西


node[fontname="ARIAL.TTF",shape="record",height=0.3,fontsize=10,style="filled,solid,setlinewidth(0.5)",fillcolor="#CCFF99",color=blue];


表示node的字符是从windows/font目录里面的ARIAL.TTF,模型是record,高度0.3,(尽在fixed的sytle才有用),style,填充,实线绘制表格,线宽0.5英尺(??反正看着还行),填充颜色是RGB色,绘制表格颜色是color指明的blue


rankdir=LR;

表示 -> 是从左到右的模式


主意,ID,或者node的ID,port都不能有出[a-zA-Z0-9_]以外的字符,包括点(.)


另外感觉dot比较规矩,而circo比较扩张,各有各的适用范围,感觉类似数据表格之间的关系这种,最好还是利用dot来生产图形。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值