十分鐘學(xué)會(huì)graphviz畫圖

一、認(rèn)識(shí)graphviz

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

image.png

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


image.png

二、安裝graphviz

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

image.png

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

image.png

三、使用graphviz

3.1 基本信息

graphviz中包含了眾多的布局器:

dot 默認(rèn)布局方式,主要用于有向圖
neato 基于spring-model(又稱force-based)算法
twopi 徑向布局
circo 圓環(huán)布局
fdp 用于無(wú)向圖

以上布局我都使用過(guò),但是個(gè)人比較傾向dot和twopi,可以根據(jù)需求來(lái)畫圖。

3.2 基本使用

以畫一個(gè)dot布局為例子:
(1)建立一個(gè)first.dot腳本:

digraph first2{
a;
b;
c;
d;
a->b;
b->d;
c->d;
}

解釋:digraph是畫圖類型,接觸高級(jí)使用可以有不同的類型,first2可以和文件名first不一樣。畫了abcd4個(gè)點(diǎn)。然后a->b表示a點(diǎn)指向b點(diǎn),如果有線條的指向,可以不用先聲明點(diǎn)。即,上述代碼等價(jià)于:

digraph first2{
a->b;
b->d;
c->d;
}

(2)畫圖
打開(kāi)cmd到first.dot目錄下,運(yùn)行:
dot -Tpng first.dot -o first.png
可以得到畫好的圖形。
解釋:dot表示使用的是dot布局,其他布局相應(yīng)的修改即可,-T表示格式,即畫成png格式,-o表示重命名為first.png。

在這里如果出現(xiàn)syntax error,可看第四部分常見(jiàn)問(wèn)題解決。

(3)畫圖結(jié)果
上面的簡(jiǎn)單的代碼得到以下結(jié)果:

image.png

3.3 高級(jí)使用

網(wǎng)上參考一篇博客,寫的比較詳細(xì),對(duì)于很多應(yīng)用場(chǎ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/

但是,想要查詢每個(gè)屬性的信息,可以看官網(wǎng)的查詢文檔:
Node, Edge and Graph Attributes(屬性):https://graphviz.gitlab.io/_pages/doc/info/attrs.html
Node Shapes(節(jié)點(diǎn)形狀):https://graphviz.gitlab.io/_pages/doc/info/shapes.html
Arrow Shapes(箭頭形狀):https://graphviz.gitlab.io/_pages/doc/info/arrows.html

四、常見(jiàn)問(wèn)題

4.1 編譯問(wèn)題

如果遇見(jiàn)以下錯(cuò)誤:

image.png

解決:
1、編碼問(wèn)題。
把文件另存為,'utf-8'或'ANSI'(不涉及中文使用時(shí)),看是否編譯出問(wèn)題。
2、對(duì)于文件格式的識(shí)別。
將文件開(kāi)頭加2個(gè)空格,其識(shí)別的時(shí)候,對(duì)于第一個(gè)字符,在windows下會(huì)問(wèn)題,源于文件的編碼格式。

4.2 中文問(wèn)題

修改文件,Graphviz2.37\etc\fonts\fonts.conf,安裝的相對(duì)目錄。
(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é)點(diǎn)的設(shè)置。

可用的中文,有很多:

黑體:SimHei 
宋體:SimSun 
新宋體:NSimSun 
仿宋:FangSong 
楷體:KaiTi 
新細(xì)明體:PMingLiU
細(xì)明體:MingLiU
標(biāo)楷體:DFKai-SB
微軟正黑體:Microsoft JhengHei
微軟雅黑體:Microsoft YaHei 

2.3 dot文件中的中文前后加空格
如:label="節(jié)點(diǎn)"應(yīng)為label=" 節(jié)點(diǎn) "

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • @synthesize和@dynamic分別有什么作用?@property有兩個(gè)對(duì)應(yīng)的詞,一個(gè)是 @synthes...
    筆筆請(qǐng)求閱讀 617評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 帶有時(shí)區(qū)的GTM時(shí)間格式,+0800時(shí)北京所在的時(shí)區(qū) Sat Jul 30 21:05:03 +0800 2016...
    落寒z閱讀 487評(píng)論 0 0
  • 親愛(ài)的兒子特別感謝你,昨天奶奶突發(fā)性眩暈,你和舅舅,媽媽一起把奶奶送到醫(yī)院,你一路在幫奶奶拿著垃圾桶因...
    五度練字玲閱讀 200評(píng)論 2 2
  • 看 多好的老公啊 是他 是大老板 可回到家里 沒(méi)有疲態(tài) 只有忙碌的身影 豐滿著胃與心 多么好的媳婦啊 是她 支付青...
    魯J閱讀 231評(píng)論 0 0

友情鏈接更多精彩內(nèi)容