Graphviz筆記系列導(dǎo)航
Graphviz的腳本語法結(jié)構(gòu)
Graphviz
支持digraph(direction graph)有向圖
和graph無向圖
兩種圖形束凑,腳本的語法非常簡(jiǎn)單,并且與C/CPP
語法類似:
-
代碼塊(圖或子圖)
:{}
包含的語句是代碼塊 -
語句
: 語句以;
結(jié)尾(可選)、也 不必強(qiáng)制換行 (但為可讀性建議換行并以;
結(jié)尾),語句有:代碼塊語句
、節(jié)點(diǎn)語句
固逗、連線語句
、屬性語句
四種 -
實(shí)體對(duì)象標(biāo)識(shí)符
: 可以是C/CPP標(biāo)識(shí)符
、數(shù)字
嘉赎、字符串
(中文字符串等非英文字符串也可以)、用單引號(hào)或雙引號(hào)包含的字符串
(用于有標(biāo)點(diǎn)字符
或空白字符
的字符串)于樟,總的來說公条,Graphviz
的實(shí)體對(duì)象標(biāo)識(shí)符
除了特殊字符
外均是合法的標(biāo)識(shí)符 -
注釋
://
表示單行注釋,/*...*/
表示多行注釋
Graphviz的三種實(shí)體對(duì)象和屬性
Graphviz
有三類實(shí)體對(duì)象迂曲,在這些實(shí)體上可以定義屬性(如:顏色靶橱、形狀、文本等):
-
G - Graph(圖)
:Graph
類似于Container(容器)
的作用路捧,用于容納N
和E
-
N - Node(結(jié)點(diǎn))
: 相同的標(biāo)識(shí)符被視為同一個(gè)節(jié)點(diǎn) -
E - Edge(連線)
: 節(jié)點(diǎn)之間的連線
Graphviz
的實(shí)體對(duì)象均在首次定義(即:首次出現(xiàn))時(shí)被創(chuàng)建关霸。
Grpahviz圖實(shí)體
Graphviz
語言支持子圖,子圖中的N
和E
在不同的代碼塊中杰扫,因此队寇,Graphviz
的Graph
可以細(xì)分成三類:
-
G - Graph/Main Graph
(圖): 以digraph
定義的是有向圖
,以graph
定義的是無向圖
-
S - Subgraph
(子圖): 以代碼塊形式的即是子圖(包括不以cluster
開頭定義的subgraph
代碼塊)章姓,S
內(nèi)定義的N
和E
公共屬性值是代碼塊內(nèi)屬性值佳遣,即超出S
外识埋,該公共屬性值不起作用,Subgraph
本身沒有可顯示的屬性零渐,Subgraph
的作用 -
C - Cluster Subgraph
(聚集子圖): 以cluster
開頭定義的subgraph
代碼塊窒舟,C
不僅有S
的容納代碼塊內(nèi)屬性值的作用外,在其內(nèi)定義的N
還會(huì)被渲染在一個(gè)子圖框內(nèi)
子圖的類型(有向圖還是無向圖)與父圖相同相恃,子圖的名稱以cluster
開頭才被當(dāng)成聚集子圖渲染辜纲。
digraph graph_name{
bgcolor="transparent";//背景透明
subgraph cluster_subgraph_name{//聚集子圖
node[shape=box];
cluster_A -> cluster_B;
}
subgraph subgraph_name{//子圖
node[shape=none];
sub_A -> sub_B;
}
{//匿名子圖
node[shape=octagon];
nest_A -> nest_B;
}
global_A -> global_B;
cluster_B -> global_B;
sub_B -> global_B;
nest_B -> global_B;
}
Graphviz圖與子圖實(shí)體
Grpahviz節(jié)點(diǎn)實(shí)體之基本節(jié)點(diǎn)
Graphviz
基本節(jié)點(diǎn)就是節(jié)點(diǎn)標(biāo)識(shí)符
加上屬性限定符“[]”
包圍著的可選節(jié)點(diǎn)屬性
,如果基本節(jié)點(diǎn)不定義label
屬性值則將節(jié)點(diǎn)標(biāo)識(shí)符
作為文本進(jìn)行顯示拦耐。
digraph gv_ex_basic_node{
bgcolor="transparent";//背景透明
node_display_this_id;
node_display_label[label="顯示\n標(biāo)簽值"];
}
Graphviz節(jié)點(diǎn)實(shí)體之基本節(jié)點(diǎn)
Grpahviz節(jié)點(diǎn)實(shí)體之HTML節(jié)點(diǎn)
Graphviz的label
屬性支持HTML
語法耕腾,使用HTML
語法時(shí):
-
node
的shape
屬性設(shè)置成none
-
node
的margin
屬性設(shè)置成0
-
node
的label
屬性字符串通過尖括號(hào)<...>
包含HTML語法字符串
定義
注:HTML節(jié)點(diǎn)的label
屬性值不建議使用引號(hào)包含,因?yàn)殡m然可以被正確渲染杀糯,但腳本源碼會(huì)失去語法高亮
的效果
digraph HTML_label_Example
{
bgcolor="transparent";//背景透明
html_ex_node[shape=none, margin=0, label=<
<table border="0" cellborder="1" cellspacing="0" cellpadding="4">
<tr>
<td rowspan="2">test</td>
<td>a</td>
<td rowspan="2">HTML-Like<br/>label</td>
</tr>
<tr>
<td>b</td>
</tr>
</table>
>];
}
Graphviz節(jié)點(diǎn)實(shí)體之HTML節(jié)點(diǎn)
Graphviz節(jié)點(diǎn)實(shí)體之Record節(jié)點(diǎn)
當(dāng)Node的定義為shape = record
時(shí)扫俺,label屬性定義了Node的結(jié)構(gòu),具體為:
-
...|...
: 分隔的字符串會(huì)在繪制的節(jié)點(diǎn)表現(xiàn)為一條分隔符 -
<...>
: 定義了錨點(diǎn)(Anchor)固翰,錨點(diǎn)可以被引用為edge的起點(diǎn)或終點(diǎn)狼纬,引用語法是${node_id}:${anchor_id}
,即用:
引用node的anchor -
{...}
: 花括號(hào)里定義的分隔符分隔節(jié)點(diǎn)將從切換方向排布(原水平分隔將變成垂直分隔骂际,原垂直分隔將變成水平分隔)
Graphviz的連線實(shí)體
digraph有向圖
使用->
定義Edge
疗琉,graph無向圖
使用-
定義Edge
。