Graphviz(http://www.graphviz.org/)是一種命令行繪圖程式,能夠直接陳述圖片上的節點、邊、方向等性質,然後自動描繪出的整張圖片。本文將實際使用Graphviz並同時講解箇中的原理。
屬性
有了前面介紹過的技巧,所有圖面關係都可以順利地繪製出來。
然而,通常我們畫圖的時候,還會對圖片做一些特別的處理。好比把字加粗、把圖變色、把標籤或連接線的外型改變、把某些節點水平對齊……諸如此類。
要控制這些東西,就要用到屬性。屬性有四種:
- 1. 用在節點上(Node, N)
- 2. 用在線段上(Edge, E)
- 3. 用在根圖片上(Graph, G)
- 4. 用在子圖片上(Cluster subgraph, C)
你可以閱讀手冊(http://www.graphviz.org/doc/info/attrs.html)中的表格,判斷哪些屬性能用在哪些地方。那麼,屬性要怎麼用呢?
屬性的套用
如果要設定根圖片或子圖片的屬性,得像前面範例中所示的那樣,在圖片的大括號範圍內指定:
這樣就行了!此外,對於節點(node)的屬性,有以下幾種指定法:
屬性指定的語句必須被中括號括起。當一次指定多值時,須用英文逗點隔開。
第三行中的node是個關鍵字,用來代稱「圖片範圍內」所有「還沒創建」的節點,或者也可將它理解為:在當前大括號的範圍內,所有尚未創建節點的屬性預設值,會被這個語句給變更。
線段(edge)的屬性指定,與節點屬性指定方式很類似(其中edge是關鍵字):
這邊順便補充一個關於線段的觀念:有些線段相關的屬性,具有head值與tail值。而這裡說的head與tail,得將它想像成一個「箭頭」的形狀(就像是「a -> b」)。
對於線段來說,這個箭頭的頭部才是head。所以,這可能與你最初想像的不一樣,因為這邊說的「Head」其實是兩個節點中,後面的那一個。
屬性範例
把先前的看過的例子加上一些屬性試試,如圖7所示。
|
▲圖7 地中海海域連接圖(加入屬性)。使用fdp渲染,種子為3 (-Gstart=3)。 |
諸多屬性中,最常用的大概是label了。label可以決定節點、線段或子圖片上要顯示什麼。
如果節點名很長的話,可以在程式內部取個簡短的名稱,之後透過短名稱操作它,另外透過label指定它的顯示內容。
color、fillcolor、fontcolor這些屬性都是控制顏色用的,不過,fillcolor只有在style被指定為"filled"時才會生效。