版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/catoop/article/details/71429363
畫流程圖裝逼神器:graphviz,不解釋
———————————如下言歸正傳,切入正題———————————–
1、下載下傳
http://www.graphviz.org/Download_windows.php下載下傳 graphviz-2.38.zip ,例如我解壓到位置 D:\Program Files\graphviz
2、配置環境變量
将 D:\Program Files\graphviz\release\bin 添加到環境變量 Path 中。
3、驗證
進入windows指令行界面,輸入dot -version,然後按回車,如果顯示graphviz的相關版本資訊,則安裝配置成功。
如下:
C:\Users\shanhy>dot -version
dot - graphviz version 2.38.0 (20140413.2041)
libdir = "D:\Program Files\graphviz\release\bin"
Activated plugin library: gvplugin_dot_layout.dll
Using layout: dot:dot_layout
Activated plugin library: gvplugin_core.dll
Using render: dot:core
Using device: dot:dot:core
The plugin configuration file:
D:\Program Files\graphviz\release\bin\config6
was successfully loaded.
render : cairo dot fig gd gdiplus map pic pov ps svg tk vml vrml xdot
layout : circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
textlayout : textlayout
device : bmp canon cmap cmapx cmapx_np dot emf emfplus eps fig gd gd2 gif gv imap imap_np ismap jpe jpeg jpg m
etafile pdf pic plain plain-ext png pov ps ps2 svg svgz tif tiff tk vml vmlz vrml wbmp xdot xdot1.2 xdot1.4
loadimage : (lib) bmp eps gd gd2 gif jpe jpeg jpg png ps svg
4、基本繪圖入門
運作 D:\Program Files\graphviz\release\bin 目錄下的 gvedit.exe 可以運作打開圖形界面。
File > New 建立新的腳本檔案,編寫腳本後,點選 “Layout”圖示(快捷鍵F5)可以直接檢視結果。
小試牛刀:
digraph gvDemo {
main -> parse -> execute;
main -> init;
main -> cleanup;
execute -> make_string;
execute -> printf
init -> make_string;
main -> printf;
execute -> compare;
}
效果:
digraph gvDemo{
node [peripheries=2 style=filled color="#eecc80"]
edge [color="sienna" fontcolor="green"]
main -> parse -> execute;
main -> init [arrowhead = box];
main -> cleanupi -> main;
make_string[label = once shape=parallelogram style=filled ]
execute -> make_string[label=Go style=dashed arrowtail=diamond];
execute -> printf [shape=box];
init -> make_string;
main -> printf[dir=none];
execute -> compare[dir=both];
}
效果(這個不錯,可以當以後的模闆用 ^_^):
示例1:graph 使用 – 描述關系
graph gvDemo1 {
a -- b
a -- b
b -- a [color=blue]
}
效果:
示例2:digraph 使用 -> 描述關系
digraph gvDemo2 {
a -> b
a -> b
b -> a [color=blue style=filled]
}
示例3:
digraph gvDemo3 {
edge[fontname="Microsoft YaHei"]
node[fontname="Microsoft YaHei"]
graph[fontname="Microsoft YaHei"]
label="遊戲資源更新流程"
rankdir="TB"
start[label="啟動遊戲" shape=circle style=filled]
ifwifi[label="網絡環境判斷是否 WIFI" shape=diamond]
needupdate[label="是否有資源需要更新" shape=diamond]
startslientdl[label="靜默下載下傳" shape=box]
enterhall[label="進入遊戲大廳" shape=box]
enterroom[label="進入房間" shape=box]
resourceuptodate[label="資源不完整" shape=diamond]
startplay[label="正常遊戲" shape=circle fillcolor=blue]
warning[label="提醒玩家是否更新" shape=diamond]
startdl[label="進入下載下傳界面" shape=box]
//{rank=same; needupdate, enterhall}
{shape=diamond; ifwifi, needupdate}
start -> ifwifi
ifwifi->needupdate[label="是"]
ifwifi->enterhall[label="否"]
needupdate->startslientdl[label="是"]
startslientdl->enterhall
needupdate->enterhall[label="否"]
enterhall -> enterroom
enterroom -> resourceuptodate
resourceuptodate -> warning[label="是"]
resourceuptodate -> startplay[label="否"]
warning -> startdl[label="确認下載下傳"]
warning -> enterhall[label="取消下載下傳"]
startdl -> enterhall[label="取消下載下傳"]
startdl -> startplay[label="下載下傳完成"]
}
示例4:
graph gvDemo4{
"黑海" -- "亞速海";
"黑海" -- "博斯普魯斯海峽"
"達達尼爾海峽" -- "愛琴海"
subgraph cluster_T{//新東西
label = "黑海海峽";//新東西
"達達尼爾海峽" -- "馬爾馬拉海" -- "博斯普魯斯海峽";
}
subgraph cluster_M{
label = "地中海海域";
"中部地中海" -- {"愛琴海" "愛奧尼亞海" "西西裡海峽"}; //也是新東西
"西部地中海" -- {"西西裡海峽" "第勒尼安海" "利古裡亞海" "伊比利海" "阿爾沃蘭海"};
"愛奧尼亞海" -- "亞得裡亞海";
"阿爾沃蘭海" -- "直布羅陀海峽";
}
}
這張圖有些新東西可以看。
第一個是subgraph 關鍵字。一如名字所示,他是用來定義「次級圖檔」用的。
次級圖檔在dot的官方檔案中常被叫作cluster subgraph,特指圖示中被方框包裹起來的那兩塊,其定義方式和一般的graph非常相似,不過使用上有兩件事需要留意:
graph的命名得以cluster字首開頭,否則文法雖然能過關,但生不出圖面上您預期的效果。
如果父圖是無向圖,他本身也得是無向圖;反之如果父圖是有向圖,這邊也得乖乖照着來。
第二個重點是下面這段:
“中部地中海” – {“愛琴海” “愛奧尼亞海” “西西裡海峽”};
用大括号括起,用空格分開-這是一口氣将好幾個節點群組起來同時操作的方法,其等效于:
“中部地中海” – “愛琴海”; 2 “中部地中海” – “愛奧尼亞海”; 3 “中部地中海” – “西西裡海峽”;
您甚至可以用以下程式碼畫出下面這個圖:
digraph gvABC {
{ a b c } -> { d e f }
}
除了直接使用工具檢視和生成結果外,還可以使用指令來操作:
文法:
<cmd> <inputfile> -T <format> -o <outputfile>
示例:
dot D:\test\1.gv -Tpng -o image.png
Graphviz 中的 cmd 有好多種,每種使用方法都完全相同,差别隻在于渲染出來的圖檔效果不一樣。
dot 渲染的圖具有明确方向性(最常用,一般都使用這個)。
neato 渲染的圖缺乏方向性。
twopi 渲染的圖采用放射性布局。
circo 渲染的圖采用環型布局。
fdp 渲染的圖缺乏方向性。
sfdp 渲染大型的圖,圖檔缺乏方向性。
PS:
Setting(快捷鍵Shift + F5) 裡面我們可以設定生成的檔案格式,例如可以生成 svg、pdf 等等格式,很強大。你可以參考工具裡面可以選擇的值帶入到指令行執行。
Graphviz 使用空格來解析腳本,是以我們在編寫腳本的時候,對于含有空格的字元,要使用雙引号,這樣才不會出現錯誤。
更多關于 dot 文法和graphviz 的使用詳見官方文檔:
http://www.graphviz.org/Documentation.php關于中文亂碼問題的解決方法: 先将源檔案儲存為UTF-8格式,然後對中文内容設定 frontname,例如:
start[label="啟動遊戲" shape=circle style=filled, fontname="NSimSun"]
或者設定全局屬性,例如上面gvDemo3 中的代碼片段:
digraph gvDemo3 {
edge[fontname="Microsoft YaHei"]
node[fontname="Microsoft YaHei"]
graph[fontname="Microsoft YaHei"]
}
fontname後面也可以直接指定 xxx.ttf 字型檔案
Windows系統中文字型的英文名對應關系參考如下:
新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑體:SimHei
宋體:SimSun
新宋體:NSimSun
仿宋:FangSong
楷體:KaiTi
仿宋_GB2312:FangSong_GB2312
楷體_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微軟雅黑體:Microsoft YaHei
參考資料:
http://www.graphviz.org/Documentation/dotguide.pdf(官方)
http://blog.jobbole.com/94472/