一、認識graphviz
接觸graphviz是幾年前的一個項目,要畫出數(shù)據(jù)網(wǎng)絡(luò)的布局,使用graphviz能比較清楚的畫出數(shù)據(jù)之間的關(guān)系。
可以在gallery中查看他能完成的圖形:http://www.graphviz.org/gallery/。graphviz最方便的地方在于能夠很快的清晰的畫出點與點之間的關(guān)系,并且有許多布局算法能夠很好的去布局。
之前使用它畫過流程圖,如:

還有決策樹。使用twopi畫出數(shù)據(jù)的關(guān)聯(lián)關(guān)系:

二、安裝graphviz
官網(wǎng)下載:http://www.graphviz.org/download/。
根據(jù)自己的版本來選擇:

安裝在任意喜歡的位置。但是需要把安裝目錄的graphviz/bin加入環(huán)境變量PATH里,我這里只寫了相對路徑。
打開cmd,輸入:dot --help,如果彈出以下信息,就是安裝成功:

三、使用graphviz
3.1 基本信息
graphviz中包含了眾多的布局器:
dot 默認布局方式,主要用于有向圖
neato 基于spring-model(又稱force-based)算法
twopi 徑向布局
circo 圓環(huán)布局
fdp 用于無向圖
以上布局我都使用過,但是個人比較傾向dot和twopi,可以根據(jù)需求來畫圖。
3.2 基本使用
以畫一個dot布局為例子:
(1)建立一個first.dot腳本:
digraph first2{
a;
b;
c;
d;
a->b;
b->d;
c->d;
}
解釋:digraph是畫圖類型,接觸高級使用可以有不同的類型,first2可以和文件名first不一樣。畫了abcd4個點。然后a->b表示a點指向b點,如果有線條的指向,可以不用先聲明點。即,上述代碼等價于:
digraph first2{
a->b;
b->d;
c->d;
}
(2)畫圖
打開cmd到first.dot目錄下,運行:
dot -Tpng first.dot -o first.png
可以得到畫好的圖形。
解釋:dot表示使用的是dot布局,其他布局相應(yīng)的修改即可,-T表示格式,即畫成png格式,-o表示重命名為first.png。
在這里如果出現(xiàn)syntax error,可看第四部分常見問題解決。
(3)畫圖結(jié)果
上面的簡單的代碼得到以下結(jié)果:

3.3 高級使用
網(wǎng)上參考一篇博客,寫的比較詳細,對于很多應(yīng)用場景都有提到: http://icodeit.org/2012/01/%E4%BD%BF%E7%94%A8graphviz%E7%BB%98%E5%88%B6%E6%B5%81%E7%A8%8B%E5%9B%BE/
但是,想要查詢每個屬性的信息,可以看官網(wǎng)的查詢文檔:
Node, Edge and Graph Attributes(屬性):https://graphviz.gitlab.io/_pages/doc/info/attrs.html
Node Shapes(節(jié)點形狀):https://graphviz.gitlab.io/_pages/doc/info/shapes.html
Arrow Shapes(箭頭形狀):https://graphviz.gitlab.io/_pages/doc/info/arrows.html
四、常見問題
4.1 編譯問題
如果遇見以下錯誤:

解決:
1、編碼問題。
把文件另存為,'utf-8'或'ANSI'(不涉及中文使用時),看是否編譯出問題。
2、對于文件格式的識別。
將文件開頭加2個空格,其識別的時候,對于第一個字符,在windows下會問題,源于文件的編碼格式。
4.2 中文問題
修改文件,Graphviz2.37\etc\fonts\fonts.conf,安裝的相對目錄。
(1)文件修改
將下列代碼:
<dir>#WINDOWSFONTDIR#</dir>
<dir>~/.fonts</dir>
修改為:
<dir>C:\WINDOWS\Fonts</dir>
<dir>~/.fonts</dir>
(2)文本設(shè)置
2.1 文本保存的編碼為"utf-8"
2.2 文本中的字體設(shè)置
使用的dot文件按照規(guī)則屬性,設(shè)置fontname屬性即可:
fontname="Microsoft YaHei"
edge [fontname="Microsoft YaHei"];
node [fontname="Microsoft YaHei"];
以上分別是全局、邊、節(jié)點的設(shè)置。
可用的中文,有很多:
黑體:SimHei
宋體:SimSun
新宋體:NSimSun
仿宋:FangSong
楷體:KaiTi
新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
微軟正黑體:Microsoft JhengHei
微軟雅黑體:Microsoft YaHei
2.3 dot文件中的中文前后加空格
如:label="節(jié)點"應(yīng)為label=" 節(jié)點 "