咱們程序員在工做生活中,有不少場合下須要繪製圖表,好比PPT裏的圖表,學習筆記的一些助記圖,還有最多見的,工做中大量使用的流程圖。node
在 Window 下,咱們有不少好用的工具,好比 Visio
、 EA
等等。這些軟件也很好用,但都有個缺點,那就是太複雜。咱們須要必定的美工基礎,還要學不少軟件操做,才能畫出一張很簡單的流程圖。程序員
並且,更要命的是,一旦需求發生變更,很很差修改,每每牽一髮而動全身。因此常常在聽到需求變動的時候,良許就脊背一涼……ide
後來,在大神的介紹下,良許開始使用一個神器。這個神器不須要你懂美工,也不太須要懂軟件操做,繪圖的過程跟你寫軟件的過程差很少,短短的幾行代碼,就能把你頭腦裏的想法表現出來。工具
並且,不用擔憂佈局,不用擔憂修改,甚至都不用鼠標,也給製做出至關精美的做品!佈局
這個神器就是:dot
命令!學習
這個神器還有個圖形界面版,叫 Graphviz
,但良許習慣了命令行,通常是在命令行下完成的。字體
咱們先來看下它能作什麼。如下幾個圖片選自它的官網:命令行
這只是其中的幾張圖而已,更多圖片能夠去它的官網查看:設計
http://www.graphviz.org
這個軟件很是強大,若是掌握得好的話,能夠畫出很是好看的做品,並且還不怕產品經理改需求。可是,在大多數狀況下,咱們不太須要用到它的高級功能,每每一些很基礎的功能就能夠應付咱們工做中的 80% 以上的需求了。3d
這個軟件的安裝很簡單,只需執行如下命令便可:
sudo apt install graphviz
稍等一小會兒,就安裝成功了。而後,就能夠愉快地玩耍啦~
咱們先來看看一個 Hello world 水平的做品。
首先,在任意位置建立一個 test.dot
文件(固然也能夠叫其它名字),文件的內容以下:
graph g{ "Hello" -- "world" }
而後,執行如下命令:
dot -Tpng -o test.png test.dot
以後,就在當前目錄下生成了下面這幅最簡單的圖片了,是否是很是簡單?
咱們來簡單介紹下 DOT 命令的語法。在 test.dot 文件裏,graph
表示的是這幅圖是 無向圖
,也就是鏈接線是沒有箭頭的。與之對應的是 digraph
,表示 有向圖
,鏈接線是有箭頭的。
而圖片的描述,是在 {}
裏進行,而且也支持註釋,註釋風格與 C 語言相似,//
用於單行註釋, /**/
用於多行註釋。
前文提到,dot 命令十分強大,這裏只介紹它的最基本的一些用法,而學會這些最基本的命令,就能夠應對 80% 左右的工做。更多高級用法能夠參考它的官網。
相似於腳本語言,節點無需申明就能夠直接使用。而對於節點,咱們通常設置它的如下幾個屬性:
這些屬性是在節點後的一對方括號 []
裏設置的。不少狀況下,咱們的節點屬性是徹底相同的,那麼咱們能夠定義一個 node
,並對它進行設置,那麼圖形裏全部節點屬性都跟 node 同樣。若是某個節點想搞特殊,只需單獨對它進行設置便可。
graph g{ node [shape = "box", style = "filled", color = "red", fillcolor = "green"] //設置節點的默認形狀,類型,顏色,填充顏色 a [shape = "ellipse", fillcolor = "yellow", label = "Hello"] //對某個節點進行單獨設置 b [label = "world"] a -- b a -- c //不對c進行設置,使用默認屬性 d [shape = "circle",label = "cicle"] //d單獨設置屬性 c -- d }
鏈接線依照有無箭頭分爲有向邊和無向邊。它的經常使用屬性有以下:
對於有向邊,還能夠設置起點及終點的位置,用 e, s, w, n
表示 東南西北
,也能夠組合來表示,詳細請看下面實例。
和節點相似,鏈接線也能夠設置默認屬性,用 edge
表示。若是不使用默認屬性的話,也能夠自定義屬性。
digraph edge_settings { edge [color = "green", decorate = false] //設置邊的默認屬性 node [shape = "polygon", sides = 4, color = "blue"] a -> b [style = "dotted", color = "red", label = "a to b"] //設置style、color、label b: se -> c: w [headlabel = "end", taillabel = "start"] //設置邊從b的「東南方」出發,從c的「西方」結束,設置有向邊起點和終點的label {c, f} -> {d, e} [label = "multi-lines", decorate = true] //能夠用這種方式同時畫多條邊 }
DOT語言能夠描述無向圖和有向圖兩種圖,graph標識無向圖,digraph標識有向圖。對於圖的屬性設置,經常使用的有如下一些:
圖裏面還能夠包含子圖,子圖必須以 cluster
做爲前綴開始。好比官網首頁上的圖,即本文第一張圖,就是圖裏包含子圖,它的源碼以下:
digraph graph_settings { start [shape = "Mdiamond"] end [shape = "Msquare"] subgraph cluster_sub1 { label = "process #1" labelloc = "t" bgcolor = "gray55" node [style = "filled", color = "white"] a0 -> a1 -> a2 -> a3 -> a0 } subgraph cluster_sub2 { label = "process #2" labelloc = "t" color = "blue" node [style = "filled", color = "black", fillcolor = "gray55"] b0 -> b1 -> b2 -> b3 } start -> {a0, b0} a1 -> b3 b2 -> a3 {a3, b3} -> end }
利用 dot 命令來繪圖,很是省事,也很是靈活,對於設計菜鳥而言,簡直不能太方便!它的功能十分強大,本文所介紹的只是它很是經常使用,但也是很是實用的一些基本功能,掌握這些功能就能應對工做中絕大部分的場景。但想要作出更加炫酷的效果,還須要再細細研究它官網的資料。
公衆號:良許Linux