日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Graphviz 畫圖教程(Python)

系統(tǒng) 1977 0

文章目錄

      • 前言
      • Graphviz庫
      • 開始
        • Digraph(一)
          • Dot代碼
        • Digraph(二)
          • Dot代碼
        • Digraph(三)
          • Dot代碼
        • Source
          • Dot代碼
      • 結(jié)語

前言

之前我的博客介紹了Graphviz 畫圖教程,雖然dot語法類似C語言容易編寫和理解,但是這僅限于小圖,當(dāng)你想要畫一個(gè)大圖的時(shí)候,每一個(gè)結(jié)點(diǎn)都得一個(gè)個(gè)去定義名字、屬性、連接線,這無疑是十分麻煩的,這種時(shí)候就想到了Python,能否利用Python語言編寫一個(gè)畫圖腳本呢?

Graphviz庫

幸運(yùn)的是,Python正好有一個(gè)Graphviz庫,Github地址
安裝也是十分簡單,只需要一行代碼:
pip install graphviz

開始

Digraph(一)

本次博客的代碼直接在Jupyter上運(yùn)行,方便顯示結(jié)果

            
              
                from
              
               graphviz 
              
                import
              
               Digraph

dot 
              
                =
              
               Digraph
              
                (
              
              comment
              
                =
              
              
                'The Round Table'
              
              
                )
              
              

dot
              
                .
              
              node
              
                (
              
              
                'A'
              
              
                ,
              
              
                'King Arthur'
              
              
                )
              
              
dot
              
                .
              
              node
              
                (
              
              
                'B'
              
              
                ,
              
              
                'Sir Bedevere the Wise'
              
              
                )
              
              
dot
              
                .
              
              node
              
                (
              
              
                'L'
              
              
                ,
              
              
                'Sir Lancelot the Brave'
              
              
                )
              
              

dot
              
                .
              
              edges
              
                (
              
              
                [
              
              
                'AB'
              
              
                ,
              
              
                'AL'
              
              
                ]
              
              
                )
              
              
dot
              
                .
              
              edge
              
                (
              
              
                'B'
              
              
                ,
              
              
                'L'
              
              
                ,
              
               constraint
              
                =
              
              
                'false'
              
              
                )
              
              

dot

            
          

Graphviz 畫圖教程(Python)_第1張圖片

Dot代碼
            
              
                // The Round Table
              
              
digraph 
              
                {
              
              
	A 
              
                [
              
              label
              
                =
              
              
                "King Arthur"
              
              
                ]
              
              
	B 
              
                [
              
              label
              
                =
              
              
                "Sir Bedevere the Wise"
              
              
                ]
              
              
	L 
              
                [
              
              label
              
                =
              
              
                "Sir Lancelot the Brave"
              
              
                ]
              
              
	A 
              
                ->
              
               B
	A 
              
                ->
              
               L
	B 
              
                ->
              
               L 
              
                [
              
              constraint
              
                =
              
              false
              
                ]
              
              
                }
              
            
          

Digraph(二)

            
              
                from
              
               graphviz 
              
                import
              
               Digraph

f 
              
                =
              
               Digraph
              
                (
              
              
                'finite_state_machine'
              
              
                ,
              
               filename
              
                =
              
              
                'fsm.gv'
              
              
                )
              
              
f
              
                .
              
              attr
              
                (
              
              rankdir
              
                =
              
              
                'LR'
              
              
                ,
              
               size
              
                =
              
              
                '8,5'
              
              
                )
              
              

f
              
                .
              
              attr
              
                (
              
              
                'node'
              
              
                ,
              
               shape
              
                =
              
              
                'doublecircle'
              
              
                )
              
              
f
              
                .
              
              node
              
                (
              
              
                'LR_0'
              
              
                )
              
              
f
              
                .
              
              node
              
                (
              
              
                'LR_3'
              
              
                )
              
              
f
              
                .
              
              node
              
                (
              
              
                'LR_4'
              
              
                )
              
              
f
              
                .
              
              node
              
                (
              
              
                'LR_8'
              
              
                )
              
              

f
              
                .
              
              attr
              
                (
              
              
                'node'
              
              
                ,
              
               shape
              
                =
              
              
                'circle'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_0'
              
              
                ,
              
              
                'LR_2'
              
              
                ,
              
               label
              
                =
              
              
                'SS(B)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_0'
              
              
                ,
              
              
                'LR_1'
              
              
                ,
              
               label
              
                =
              
              
                'SS(S)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_1'
              
              
                ,
              
              
                'LR_3'
              
              
                ,
              
               label
              
                =
              
              
                'S($end)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_2'
              
              
                ,
              
              
                'LR_6'
              
              
                ,
              
               label
              
                =
              
              
                'SS(b)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_2'
              
              
                ,
              
              
                'LR_5'
              
              
                ,
              
               label
              
                =
              
              
                'SS(a)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_2'
              
              
                ,
              
              
                'LR_4'
              
              
                ,
              
               label
              
                =
              
              
                'S(A)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_5'
              
              
                ,
              
              
                'LR_7'
              
              
                ,
              
               label
              
                =
              
              
                'S(b)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_5'
              
              
                ,
              
              
                'LR_5'
              
              
                ,
              
               label
              
                =
              
              
                'S(a)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_6'
              
              
                ,
              
              
                'LR_6'
              
              
                ,
              
               label
              
                =
              
              
                'S(b)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_6'
              
              
                ,
              
              
                'LR_5'
              
              
                ,
              
               label
              
                =
              
              
                'S(a)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_7'
              
              
                ,
              
              
                'LR_8'
              
              
                ,
              
               label
              
                =
              
              
                'S(b)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_7'
              
              
                ,
              
              
                'LR_5'
              
              
                ,
              
               label
              
                =
              
              
                'S(a)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_8'
              
              
                ,
              
              
                'LR_6'
              
              
                ,
              
               label
              
                =
              
              
                'S(b)'
              
              
                )
              
              
f
              
                .
              
              edge
              
                (
              
              
                'LR_8'
              
              
                ,
              
              
                'LR_5'
              
              
                ,
              
               label
              
                =
              
              
                'S(a)'
              
              
                )
              
              

f

            
          

Graphviz 畫圖教程(Python)_第2張圖片

Dot代碼
            
              digraph finite_state_machine 
              
                {
              
              
	rankdir
              
                =
              
              LR size
              
                =
              
              
                "8,5"
              
              
	node 
              
                [
              
              shape
              
                =
              
              doublecircle
              
                ]
              
              
	LR_0
	LR_3
	LR_4
	LR_8
	node 
              
                [
              
              shape
              
                =
              
              circle
              
                ]
              
              
	LR_0 
              
                ->
              
               LR_2 
              
                [
              
              label
              
                =
              
              
                "SS(B)"
              
              
                ]
              
              
	LR_0 
              
                ->
              
               LR_1 
              
                [
              
              label
              
                =
              
              
                "SS(S)"
              
              
                ]
              
              
	LR_1 
              
                ->
              
               LR_3 
              
                [
              
              label
              
                =
              
              
                "S($end)"
              
              
                ]
              
              
	LR_2 
              
                ->
              
               LR_6 
              
                [
              
              label
              
                =
              
              
                "SS(b)"
              
              
                ]
              
              
	LR_2 
              
                ->
              
               LR_5 
              
                [
              
              label
              
                =
              
              
                "SS(a)"
              
              
                ]
              
              
	LR_2 
              
                ->
              
               LR_4 
              
                [
              
              label
              
                =
              
              
                "S(A)"
              
              
                ]
              
              
	LR_5 
              
                ->
              
               LR_7 
              
                [
              
              label
              
                =
              
              
                "S(b)"
              
              
                ]
              
              
	LR_5 
              
                ->
              
               LR_5 
              
                [
              
              label
              
                =
              
              
                "S(a)"
              
              
                ]
              
              
	LR_6 
              
                ->
              
               LR_6 
              
                [
              
              label
              
                =
              
              
                "S(b)"
              
              
                ]
              
              
	LR_6 
              
                ->
              
               LR_5 
              
                [
              
              label
              
                =
              
              
                "S(a)"
              
              
                ]
              
              
	LR_7 
              
                ->
              
               LR_8 
              
                [
              
              label
              
                =
              
              
                "S(b)"
              
              
                ]
              
              
	LR_7 
              
                ->
              
               LR_5 
              
                [
              
              label
              
                =
              
              
                "S(a)"
              
              
                ]
              
              
	LR_8 
              
                ->
              
               LR_6 
              
                [
              
              label
              
                =
              
              
                "S(b)"
              
              
                ]
              
              
	LR_8 
              
                ->
              
               LR_5 
              
                [
              
              label
              
                =
              
              
                "S(a)"
              
              
                ]
              
              
                }
              
            
          

Digraph(三)

            
              
                from
              
               graphviz 
              
                import
              
               Digraph

g 
              
                =
              
               Digraph
              
                (
              
              
                'G'
              
              
                ,
              
               filename
              
                =
              
              
                'cluster_edge.gv'
              
              
                )
              
              
g
              
                .
              
              attr
              
                (
              
              compound
              
                =
              
              
                'true'
              
              
                )
              
              
                with
              
               g
              
                .
              
              subgraph
              
                (
              
              name
              
                =
              
              
                'cluster0'
              
              
                )
              
              
                as
              
               c
              
                :
              
              
    c
              
                .
              
              edges
              
                (
              
              
                [
              
              
                'ab'
              
              
                ,
              
              
                'ac'
              
              
                ,
              
              
                'bd'
              
              
                ,
              
              
                'cd'
              
              
                ]
              
              
                )
              
              
                with
              
               g
              
                .
              
              subgraph
              
                (
              
              name
              
                =
              
              
                'cluster1'
              
              
                )
              
              
                as
              
               c
              
                :
              
              
    c
              
                .
              
              edges
              
                (
              
              
                [
              
              
                'eg'
              
              
                ,
              
              
                'ef'
              
              
                ]
              
              
                )
              
              

g
              
                .
              
              edge
              
                (
              
              
                'b'
              
              
                ,
              
              
                'f'
              
              
                ,
              
               lhead
              
                =
              
              
                'cluster1'
              
              
                )
              
              
g
              
                .
              
              edge
              
                (
              
              
                'd'
              
              
                ,
              
              
                'e'
              
              
                )
              
              
g
              
                .
              
              edge
              
                (
              
              
                'c'
              
              
                ,
              
              
                'g'
              
              
                ,
              
               ltail
              
                =
              
              
                'cluster0'
              
              
                ,
              
               lhead
              
                =
              
              
                'cluster1'
              
              
                )
              
              
g
              
                .
              
              edge
              
                (
              
              
                'c'
              
              
                ,
              
              
                'e'
              
              
                ,
              
               ltail
              
                =
              
              
                'cluster0'
              
              
                )
              
              
g
              
                .
              
              edge
              
                (
              
              
                'd'
              
              
                ,
              
              
                'h'
              
              
                )
              
              

g

            
          

Graphviz 畫圖教程(Python)_第3張圖片

Dot代碼
            
              digraph G 
              
                {
              
              
	compound
              
                =
              
              true
	subgraph cluster0 
              
                {
              
              
		a 
              
                ->
              
               b
		a 
              
                ->
              
               c
		b 
              
                ->
              
               d
		c 
              
                ->
              
               d
	
              
                }
              
              
	subgraph cluster1 
              
                {
              
              
		e 
              
                ->
              
               g
		e 
              
                ->
              
               f
	
              
                }
              
              
	b 
              
                ->
              
               f 
              
                [
              
              lhead
              
                =
              
              cluster1
              
                ]
              
              
	d 
              
                ->
              
               e
	c 
              
                ->
              
               g 
              
                [
              
              lhead
              
                =
              
              cluster1 ltail
              
                =
              
              cluster0
              
                ]
              
              
	c 
              
                ->
              
               e 
              
                [
              
              ltail
              
                =
              
              cluster0
              
                ]
              
              
	d 
              
                ->
              
               h

              
                }
              
            
          

Source

            
              
                from
              
               graphviz 
              
                import
              
               Source

src 
              
                =
              
               Source
              
                (
              
              
                'digraph "the holy hand grenade" { rankdir=LR; 1 -> 2 -> 3 -> lob }'
              
              
                )
              
              

src


            
          

在這里插入圖片描述

Dot代碼
            
              digraph 
              
                "the holy hand grenade"
              
              
                {
              
               
	rankdir
              
                =
              
              LR
              
                ;
              
              
                1
              
              
                ->
              
              
                2
              
              
                ->
              
              
                3
              
              
                ->
              
               lob 

              
                }
              
            
          

結(jié)語

粗略地記錄了下Graphviz庫的一些語法及操作,更多內(nèi)容可以看Graphviz文檔


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 习水县| 阿拉尔市| 昌宁县| 福贡县| 家居| 鲁甸县| 辛集市| 上虞市| 清远市| 江孜县| 竹溪县| 荔波县| 岳西县| 巧家县| 延寿县| 维西| 嘉鱼县| 临城县| 年辖:市辖区| 陆良县| 台州市| 西畴县| 新竹市| 宜都市| 崇左市| 江川县| 防城港市| 遵义市| 石渠县| 三河市| 芦溪县| 交口县| 鄂伦春自治旗| 武功县| 英吉沙县| 乡城县| 九江市| 临洮县| 湖口县| 锦屏县| 惠安县|