亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Graphviz 畫圖教程(Python)

系統(tǒng) 1817 0

文章目錄

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

前言

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

Graphviz庫

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

開始

Digraph(一)

本次博客的代碼直接在Jupyter上運行,方便顯示結(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號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级视频片 | 欧美天堂在线视频 | 在线观看视频91 | 四虎影院网 | 久久精品99 | 黄色片网站在线免费观看 | 国产剧情一区二区 | 久久综合色视频 | 欧美人与动性xxxxbbbb | 99热热久久这里只有精品166 | 欧美中文字幕在线 | 韩国网站爱久久 | 欧美另类性视频在线看 | 99热国产这里只有精品 | 福利视频专区 | 美女嗯啊 | www.色在线观看 | 成人精品第一区二区三区 | 欧美不卡视频在线 | 99日韩 | 国产精品尹人在线观看免费 | 伊人色综合网一区二区三区 | 亚洲午夜久久久久国产 | 九色福利 | 亚洲品质自拍视频 | 色一色综合 | 最新中文字幕日本 | 成人毛片18岁女人毛片免费看 | 欧美va亚洲va在线观看蝴蝶网 | 欧美视频日韩专区午夜 | 日本亚洲一区二区 | 国产95在线 | 亚洲 | 天天操综合网 | 特黄aa级毛片免费视频播放 | 四虎影院在线免费观看视频 | 亚州国产视频 | 97视频精品全国在线观看 | 国产精品福利视频手机免费观看 | 天天插狠狠干 | 99热久 | 99色精品 |