用graphviz畫機房拓撲的幾個關鍵詞
我準備用graphviz畫機房的拓撲圖。用excel或txt記錄機器和VLAN什么的信息,用antlr寫個工具解析,然后生成dot文件,最后用graphviz把dot畫出來。
想到有這么幾個基本技術,今天試了一下。下面的這段代碼就是例子。行號是我加的,為了說明方便。執行結果如圖所示。
1. 定制節點
默認的節點是矩形圓形多邊形這樣規則的形狀??梢允褂脠D片,人類看起來漂亮一些。
參見第4行,image="pc.png"。
2. 線連接的位置
有些節點要連出去很多線,線連接的位置如果散開,有時候比較難看。sametail可以讓它們都聚在一起,參見第10和第11行。
也許,有時候想從特別的角度連到節點上,可以指定方向,參見第12行node3:se,表示從東南方向連接。
3. 題注的位置
用了定制的圖片以后,題注標在節點正中就有些不合習慣,可以用labelloc指定位置。參見第4行,lableloc=b,b表示底部。
線的題注 (這東西叫題注么?) 除了label本身以外,可以用taillabel,headlabel,分別標在箭尾或箭頭。標在箭尾或箭頭的題注,可以用labeldistance=3, labelangle=-45進一步修訂,參見第10行。
4. 節點的位置
某個節點,如果希望它跟別的節點平級,用rank,參見第15行。rank不僅能same,還可以起名字。這一技術還可以用于水平的圖,讓時間與事件對齊。
還可以用node的屬性pos指定節點位置。實驗表明,1.需要給出所有的node的位置,2.要使用neato引擎,不能用dot本身。而且,我在實驗中發現,想指定一個合理美觀的節點位置實在太難了。如果想強調某個結點的核心位置,請參見下一條。
5. 連線的位置
如果想強調某根線,用weight。weight越大,線越直,線連接的節點間距離越近。參見第9、11、12行。
weight是edge的屬性,因此既可以加在某條線的后的"[]"里,也可以如第9行的寫法,從此向下的edge都具有這樣的屬性。
更多細節,請參考[http://www.graphviz.org/doc/info/attrs.html]。
--------------------
博客會手工同步到以下地址:
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
我準備用graphviz畫機房的拓撲圖。用excel或txt記錄機器和VLAN什么的信息,用antlr寫個工具解析,然后生成dot文件,最后用graphviz把dot畫出來。
想到有這么幾個基本技術,今天試了一下。下面的這段代碼就是例子。行號是我加的,為了說明方便。執行結果如圖所示。
1 // dot -Tpng test.dot -o test.png; eog test.png 2 digraph a 3 { 4 node1 [label="NODE1", shape=none, image="pc.png", labelloc=b]; // color=white, 5 node2 [shape=box3d]; 6 node3; 7 node4; 8 9 // edge [weight=100, arrowhead=none]; 10 node1 -> node2 [taillabel="tail", headlabel="head", labeldistance=3, labelangle=-45 ,label="label", sametail="a"]; 11 // edge [weight=0.5, arrowhead=none]; 12 node1 -> node3:se [sametail="a", weight=100]; 13 node3 -> node4; 14 15 {rank = same; node2; node4; }; 16 17 18 }
1. 定制節點
默認的節點是矩形圓形多邊形這樣規則的形狀??梢允褂脠D片,人類看起來漂亮一些。
參見第4行,image="pc.png"。
2. 線連接的位置
有些節點要連出去很多線,線連接的位置如果散開,有時候比較難看。sametail可以讓它們都聚在一起,參見第10和第11行。
也許,有時候想從特別的角度連到節點上,可以指定方向,參見第12行node3:se,表示從東南方向連接。
3. 題注的位置
用了定制的圖片以后,題注標在節點正中就有些不合習慣,可以用labelloc指定位置。參見第4行,lableloc=b,b表示底部。
線的題注 (這東西叫題注么?) 除了label本身以外,可以用taillabel,headlabel,分別標在箭尾或箭頭。標在箭尾或箭頭的題注,可以用labeldistance=3, labelangle=-45進一步修訂,參見第10行。
4. 節點的位置
某個節點,如果希望它跟別的節點平級,用rank,參見第15行。rank不僅能same,還可以起名字。這一技術還可以用于水平的圖,讓時間與事件對齊。
還可以用node的屬性pos指定節點位置。實驗表明,1.需要給出所有的node的位置,2.要使用neato引擎,不能用dot本身。而且,我在實驗中發現,想指定一個合理美觀的節點位置實在太難了。如果想強調某個結點的核心位置,請參見下一條。
5. 連線的位置
如果想強調某根線,用weight。weight越大,線越直,線連接的節點間距離越近。參見第9、11、12行。
weight是edge的屬性,因此既可以加在某條線的后的"[]"里,也可以如第9行的寫法,從此向下的edge都具有這樣的屬性。
更多細節,請參考[http://www.graphviz.org/doc/info/attrs.html]。
--------------------
博客會手工同步到以下地址:
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
