Graphviz简介
簡介
graphviz是一款圖形軟件,與一般的"所見即所得"的普通畫圖工具主要使用鼠標拖拽不同,graphviz使用一門名為dot的語言用來描述圖表,用戶使用dot寫腳本,graphviz根據腳本自動布局生成圖表。graphviz將這種方式稱為"所思即所得"。
使用這種方式有幾個好處,一個是將用戶從排版中解放出來,由工具自動處理這個過程,用戶不必再關心如何布局,修改添加刪除節點的時候也不用再對整個圖的排版布局重新進行人工的整理;另一個好處是某些復雜的情況,比如代碼的類圖和調用圖,dot腳本可以使用其他工具自動生成。
graphviz提供若干的布局器,dot(這個指的是布局命令,上一個dot指的是腳本名字)是默認的布局方式,主要用于畫有向圖;還有其他的布局方式可以參考man dot;
HelloWorld
dot的語法非常簡單,一個最簡單的有向圖可以像下面這樣
digraph g{
a;
b;
a -> b;
}
digraph是關鍵字,代表有向圖,g是圖的名字,a和b是僅有的兩個節點,a指向b;將這段代碼保存為文件g.gv,使用如下命令生成圖片;
dot g.gv -Tpng -o g.png
Dot語法
[strict] (graph|digraph) name { statement-list }
以上是一個頂級圖的定義方式。如果使用了strict關鍵字,指明一個圖是"嚴格的",那么將禁止在同一對節點之間定義多條邊。如果使用digraph關鍵字,表明這是一個有向圖,連線符必須為->;如果使用graph關鍵字,表明這是一個無向圖,連線符必須為--;
語句有以下幾種形式:
name0=val0; //設置樣式屬性
node[name=val]; //設置節點的樣式屬性
edge[name=val]; //設置邊的樣式屬性
//創建一個節點n0,并設置它的各種屬性
n0[name0=val0, name1=val1, ...];
//創建一條邊連接節點n0和n1,并設置它的各種屬性
n0 edgeop n1[name0=val0, name1=val1, ...];
//創建一個子圖,子圖的名稱必須以cluster開頭
[subgraph name] { statement-list }
節點的常用屬性及值如下一般有
形狀(shape):record, box, oval, ellipse, rect ...
邊框顏色(color) 填充顏色(fillcolor):
樣式(style):solid, dashed, dotted, bold, filled, rounded ...
標簽(label)
一個更復雜的例子,一個簡單的站樁對戰角色的動畫狀態圖
digraph{
rankdir=LR;
node[shape="record"]
入場[style = "filled", fillcolor = "green"];
預備;
受傷;
攻擊;
死亡;
入場 -> 預備;
預備 -> 受傷;
受傷 -> 預備;
預備 -> 前搖;
后搖 -> 預備;
預備 -> 死亡;
受傷 -> 死亡;
subgraph cluster_attack{
bgcolor = "grey";
前搖 -> 攻擊 -> 后搖;
}
}
當節點的shape屬性為record時,可以在label中使用分隔符‘|’來分割這個節點;使用{name0|name1}的形式來縱向分割節點;
還可以在label中定義表格,使用的語法和html類似。更多的例子可以訪問
http://www.graphviz.org/content/node-shapes
局限
graphviz的好處是把用戶從排版中解放出來,但是相應的,也帶來了“不能確定每個結點的位置”的局限性,比如時序圖,使用graphviz就很難表達(非常可能是我不會)。
總結
以上是生活随笔為你收集整理的Graphviz简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSAA简介
- 下一篇: 救护车标志(救护车标志蛇图的含义)