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

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條評論
主站蜘蛛池模板: 涩涩99 | 久爱www成人网免费视频 | 四虎影院官网 | 97免费观看 | 九九久久国产精品大片 | 久热这里只有精 | 伊人中文字幕 | 女人18免费毛片视频 | 啪啪99久久综合精品色 | 一级特黄国产高清毛片97看片 | 国产a级网站 | 伊人久久亚洲综合天堂 | 久久好看视频 | 色综合久久久高清综合久久久 | 中文久久 | 成人欧美一区二区三区视频不卡 | 国产美女亚洲精品久久久久久 | 国产成人性毛片 | 国产成人精视频在线观看免费 | 深夜福利视频网站 | 美女黄色免费在线观看 | 四虎国产精品永久在线 | 美女被羞羞视频网站在线 | 性综合网 | 伊伊综合 | 污宅男666在线永久免费观看 | 爱插综合网| 久久免费资源福利资源站 | 成在线人免费视频一区二区三区 | 久久思re热9一区二区三区 | 99中文字幕| 久久精品国产一区二区三区日韩 | 国内精品久久久久久影院8f | 国产精品亚洲精品影院 | 久久久久久中文字幕 | 国产成人理在线观看视频 | 精品久久久久久久免费加勒比 | 欧美性猛交ⅹxxx乱大交按摩 | 黄色毛片免费在线观看 | 欧美毛片网站 | 综合黄色 |