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

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條評論
主站蜘蛛池模板: 国产精品美女流白浆视频 | 精品哟哟国产在线观看 | 四虎黄色影视库 | 波多野结衣一区二区三区 | 97看片网| 九月婷婷综合婷婷 | 草草第一页 | 天天插天天射 | 国产成人看片免费视频观看 | 99视频网址 | 妞干网中文字幕 | 福利视频在线观看午夜 | 色婷婷综合和线在线 | 久久成人在线视频 | 国产精品国产三级国产a | 亚洲精品三区 | 曰本女人性配视频 | 手机看片高清国产日韩片 | 色菇凉天天综合网 | 91色爱| 精品久久综合一区二区 | 高清在线一区二区三区亚洲综合 | 亚洲精品中文字幕乱码三区一二 | 四虎4hu永久免费国产精品 | 亚洲国产美女精品久久 | 国内精品久久久久影院亚洲 | 五月天婷婷在线免费观看 | 在线看的成人性视频 | 国产欧美日韩高清专区手机版 | 黄色在线免费观看 | 狠狠色噜狠狠狠狠色综合久 | 国内久久精品视频 | 一级毛片日本特黄97人人 | 97在线碰碰观看免费高清 | 中文字幕久久久久久久系列 | 色综合中文字幕在线亚洲 | 免费香蕉成视频成人网 | 国产不卡在线观看视频 | 免费中文字幕一级毛片 | 伊人久久综合视频 | 欧美一级毛片免费看高清 |