使用 Graphviz 繪製流程圖
阿新 • • 發佈:2020-08-07
流程圖常用符號及對應的無樣式 dot 語句[1]
形狀 | 描述 | DOT |
---|---|---|
用來表達過程的次序,用一條線由一個符號連線去到另一個符號。如果不是標準的上至下、左至右圖就會加上箭頭 | -> |
|
用來表示次要或程式的開始與完結。常以一個圓角長方形表示。通常裡面會標上“開始”或“結束”或其他相關字眼,如“提交查詢”或“接受產品” | terminal [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>起止符號</TD></TR></TABLE>>]; |
|
以長方形來代表一系列程式去改變數值、形式、資料的位置 | process [shape="rectangle" label="程式"]; |
|
以一個菱形去顯示一個條件程序,用來按情況去決定下一步走向。通常以“是/否”或“真/假”值去決定 | decision [shape="diamond" label="決策判斷"]; |
|
以平行四邊形來標示資料輸入或輸出的過程,即填入資料或顯示工作結果的步驟 | io [shape="parallelogram" label="輸入/輸出"]; |
|
用來補充某步驟的額外資訊,可用一個虛線來連線一個半閉合的長方型至想註釋的符號中 | comment [shape="plain" margin=0 label=<<TABLE BORDER="1" SIDES="TBL" CELLPADDING="4" CELLBORDER="0" CELLSPACING="0"><TR><TD>註解</TD></TR></TABLE>>]; x -> comment [style="dotted" arrowhead="none"]; |
|
用一個有2條左右垂直線長方型,來表示一個已在其他地方定義了的過程 | predefined [shape="plain" label=<<TABLE CELLBORDER="1" CELLPADDING="4" CELLSPACING="0" BORDER="0"><TR><TD></TD><TD>已定義流程</TD><TD></TD></TR></TABLE>>]; |
|
用一個含有字母的小圓圈來連線目標流程畫於同一頁上 | onpage [shape="circle" label="同頁參考"]; |
|
用一個倒畫的屋型來表示目標流程畫於另一頁上 | offpage [shape="invhouse" label="換頁參考"]; |
|
用一個圓柱來表示資料庫 | db [shape="cylinder" label="資料檔或資料庫"]; |
|
用一個拉長了的六角形來代表初始化或預備的過程 | init [shape="hexagon" label="初始化"]; |
一個簡單的流程圖樣例 (flowchart_demo.dot)[2]
digraph flowchart { // terminal [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>起止符號</TD></TR></TABLE>>];
// process [shape="rectangle" label="程式"];
// decision [shape="diamond" label="決策判斷"];
// io [shape="parallelogram" label="輸入/輸出"];
// comment [shape="plain" margin=0 label=<<TABLE BORDER="1" SIDES="TBL" CELLPADDING="4" CELLBORDER="0" CELLSPACING="0"><TR><TD>註解</TD></TR></TABLE>>];
// predefined [shape="plain" label=<<TABLE CELLBORDER="1" CELLPADDING="4" CELLSPACING="0" BORDER="0"><TR><TD></TD><TD>已定義流程</TD><TD></TD></TR></TABLE>>];
// onpage [shape="circle" label="同頁參考"];
// offpage [shape="invhouse" label="換頁參考"];
// db [shape="cylinder" label="資料檔或資料庫"];
// init [shape="hexagon" label="初始化"];
// rankdir = "LR";
start [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>電燈不工作了</TD></TR></TABLE>>];
decision_1 [shape="diamond" label="電燈接好了麼?"];
comment_1 [shape="plain" margin=0 label=<<TABLE BORDER="1" SIDES="TBL" CELLPADDING="4" CELLBORDER="0" CELLSPACING="0"><TR><TD>some comments...</TD></TR></TABLE>>]; // 位置決定其渲染順序
end_1 [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>接好電源</TD></TR></TABLE>>];
decision_2 [shape="diamond" label="燈泡燒燬了麼?"];
end_2 [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>更換燈泡</TD></TR></TABLE>>];
end_3 [shape="plain" label=<<TABLE BORDER="1" CELLPADDING="4" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0"><TR><TD>修理電燈</TD></TR></TABLE>>];
start -> decision_1;
decision_1 -> comment_1 [style="dotted" arrowhead="none"];
decision_1 -> end_1 [label="否"];
decision_1 -> decision_2 [label="是"];
decision_2 -> end_2 [label="否"];
decision_2 -> end_3 [label="是"];
}
dot -Kdot flowchart_demo.dot -Tpng -o flowchart-demo.png
[3]