畫(huà)流程圖裝逼神器:graphviz,不解釋
———————————如下言歸正傳,切入正題———————————–
1、下載
http://www./Download_windows.php
下載 graphviz-2.38.zip ,例如我解壓到位置 D:\Program Files\graphviz
2、配置環(huán)境變量
將 D:\Program Files\graphviz\release\bin 添加到環(huán)境變量 Path 中。
3、驗(yàn)證
進(jìn)入windows命令行界面,輸入dot -version,然后按回車,如果顯示graphviz的相關(guān)版本信息,則安裝配置成功。
如下:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
4、基本繪圖入門
運(yùn)行 D:\Program Files\graphviz\release\bin 目錄下的 gvedit.exe 可以運(yùn)行打開(kāi)圖形界面。
File > New 創(chuàng)建新的腳本文件,編寫(xiě)腳本后,點(diǎn)擊 “Layout”圖標(biāo)(快捷鍵F5)可以直接查看結(jié)果。
小試牛刀:
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];
}
效果(這個(gè)不錯(cuò),可以當(dāng)以后的模板用 ^_^):
示例1:graph 使用 – 描述關(guān)系
graph gvDemo1 {
a -- b
a -- b
b -- a [color=blue]
}
效果:
示例2:digraph 使用 -> 描述關(guān)系
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="啟動(dòng)游戲" shape=circle style=filled]
ifwifi[label="網(wǎng)絡(luò)環(huán)境判斷是否 WIFI" shape=diamond]
needupdate[label="是否有資源需要更新" shape=diamond]
startslientdl[label="靜默下載" shape=box]
enterhall[label="進(jìn)入游戲大廳" shape=box]
enterroom[label="進(jìn)入房間" shape=box]
resourceuptodate[label="資源不完整" shape=diamond]
startplay[label="正常游戲" shape=circle fillcolor=blue]
warning[label="提醒玩家是否更新" shape=diamond]
startdl[label="進(jìn)入下載界面" 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="確認(rèn)下載"]
warning -> enterhall[label="取消下載"]
startdl -> enterhall[label="取消下載"]
startdl -> startplay[label="下載完成"]
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
效果:
示例4:
graph gvDemo4{
"黑海" -- "亞速海";
"黑海" -- "博斯普魯斯海峽"
"達(dá)達(dá)尼爾海峽" -- "愛(ài)琴海"
subgraph cluster_T{//新東西
label = "黑海海峽";//新東西
"達(dá)達(dá)尼爾海峽" -- "馬爾馬拉海" -- "博斯普魯斯海峽";
}
subgraph cluster_M{
label = "地中海海域";
"中部地中海" -- {"愛(ài)琴海" "愛(ài)奧尼亞海" "西西里海峽"}; //也是新東西
"西部地中海" -- {"西西里海峽" "第勒尼安海" "利古里亞海" "伊比利海" "阿爾沃蘭海"};
"愛(ài)奧尼亞海" -- "亞得里亞海";
"阿爾沃蘭海" -- "直布羅陀海峽";
}
}
效果:
這張圖有些新東西可以看。
第一個(gè)是subgraph 關(guān)鍵字。一如名字所示,他是用來(lái)定義「次級(jí)圖片」用的。
次級(jí)圖片在dot的官方文件中常被叫作cluster subgraph,特指圖示中被方框包裹起來(lái)的那兩塊,其定義方式和一般的graph非常相似,不過(guò)使用上有兩件事需要留意:
graph的命名得以cluster前綴開(kāi)頭,否則語(yǔ)法雖然能過(guò)關(guān),但生不出圖面上您預(yù)期的效果。
如果父圖是無(wú)向圖,他本身也得是無(wú)向圖;反之如果父圖是有向圖,這邊也得乖乖照著來(lái)。
第二個(gè)重點(diǎn)是下面這段:
“中部地中?!?– {“愛(ài)琴海” “愛(ài)奧尼亞?!?“西西里海峽”};
用大括號(hào)括起,用空格分開(kāi)-這是一口氣將好幾個(gè)節(jié)點(diǎn)群組起來(lái)同時(shí)操作的方法,其等效于:
“中部地中?!?– “愛(ài)琴?!? 2 “中部地中?!?– “愛(ài)奧尼亞?!? 3 “中部地中?!?– “西西里海峽”;
您甚至可以用以下程式碼畫(huà)出下面這個(gè)圖:
digraph gvABC {
{ a b c } -> { d e f }
}
除了直接使用工具查看和生成結(jié)果外,還可以使用命令來(lái)操作:
語(yǔ)法:
<cmd> <inputfile> -T <format> -o <o(jì)utputfile>
示例:
dot D:\test\1.gv -Tpng -o image.png
Graphviz 中的 cmd 有好多種,每種使用方法都完全相同,差別只在于渲染出來(lái)的圖片效果不一樣。
dot 渲染的圖具有明確方向性(最常用,一般都使用這個(gè))。
neato 渲染的圖缺乏方向性。
twopi 渲染的圖采用放射性布局。
circo 渲染的圖采用環(huán)型布局。
fdp 渲染的圖缺乏方向性。
sfdp 渲染大型的圖,圖片缺乏方向性。
PS:
Setting(快捷鍵Shift + F5) 里面我們可以設(shè)置生成的文件格式,例如可以生成 svg、pdf 等等格式,很強(qiáng)大。你可以參考工具里面可以選擇的值帶入到命令行執(zhí)行。
Graphviz 使用空格來(lái)解析腳本,所以我們?cè)诰帉?xiě)腳本的時(shí)候,對(duì)于含有空格的字符,要使用雙引號(hào),這樣才不會(huì)出現(xiàn)錯(cuò)誤。
更多關(guān)于 dot 語(yǔ)法和graphviz 的使用詳見(jiàn)官方文檔: http://www./Documentation.php
關(guān)于中文亂碼問(wèn)題的解決方法: 先將源文件保存為UTF-8格式,然后對(duì)中文內(nèi)容設(shè)置 frontname,例如:start[label="啟動(dòng)游戲" shape=circle style=filled, fontname="NSimSun"]
或者設(shè)置全局屬性,例如上面gvDemo3 中的代碼片段:
digraph gvDemo3 {
edge[fontname="Microsoft YaHei"]
node[fontname="Microsoft YaHei"]
graph[fontname="Microsoft YaHei"]
}
fontname后面也可以直接指定 xxx.ttf 字體文件
Windows系統(tǒng)中文字體的英文名對(duì)應(yīng)關(guān)系參考如下:
新細(xì)明體:PMingLiU
細(xì)明體:MingLiU
標(biāo)楷體:DFKai-SB
黑體:SimHei
宋體:SimSun
新宋體:NSimSun
仿宋:FangSong
楷體:KaiTi
仿宋_GB2312:FangSong_GB2312
楷體_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微軟雅黑體:Microsoft YaHei
參考資料:
http://www./Documentation/dotguide.pdf(官方)
http://blog./94472/
|