Graphviz - 도형 시각 화, python 구현

10545 단어 python가시 화
계통
자체 시스템 은 Mac OSX EI Capitan python 버 전 은 python 3.5 64bit 입 니 다.
Graphiz 홈 페이지 에서 본 mac os 의 버 전 은 비교적 낡 아서 현재 시스템 의 버 전 을 찾 지 못 했 습 니 다.그 소개 에 의 하면http://www.graphviz.org/Download_macos. php Graphviz -图形可视化,python实现_第1张图片 마지막 으로 가장 간단 하고 직접적인 방법 을 선택 하고 brew 로 brew 를 설치 하 는 방법 을 사용 합 니 다.http://brew.sh/터미널 에서 다음 명령 을 수행 합 니 다.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Graphiz 설치:
brew install graphviz

python graphviz 설치 방법: 터미널 에서 명령 사용
pip3 install graphviz

전 제 는 pip 3 가 설치 되 어 있 으 며, 일반적으로 python 3 를 설치 하면 자동 으로 설 치 됩 니 다.
해독
홈 페이지 에서 제공 하 는 예 에 따 르 면.
from graphviz import Digraph

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

#     A, A     King Arthur
dot.node('A', 'King Arthur')
dot.view()  #        ,             

#     B, B     Sir Bedevere the Wise
dot.node('B', 'Sir Bedevere the Wise')
#dot.view()

#     L, L     Sir Lancelot the Brave
dot.node('L', 'Sir Lancelot the Brave')
#dot.view()

#     ,   AB  ,  AL  。
dot.edges(['AB', 'AL'])
#dot.view()

#             
dot.edge('B', 'L', constraint='false')
#dot.view()

#  DOT source        
print(dot.source) 
 # doctest: +NORMALIZE_WHITESPACE
#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]
#}

#  source   ,   Graphviz  
dot.render('test-output/round-table.gv', view=True)

출력 그림 Graphviz -图形可视化,python实现_第2张图片
판독: 상기 프로그램 이 한 번 에 출력 을 완성 하면 도형 을 직접 출력 할 수 있 고 직접적인 느낌 을 받 을 수 있 습 니 다.그러나 원본 코드 를 보면 모두 다섯 개의 파일 이 있 음 을 알 수 있 습 니 다:compat.py , dot.py, files.py, lang.py,tools.py
그 중에서 상기 프로그램 에서 사용 하 는 기본 은 dot. py 에서 파일 을 봅 니 다.파일 에서 모두 세 가지 종 류 를 정 의 했 습 니 다. Dot, Graph, Digraph, 그 다음 두 가 지 는 모두 Dot 를 계승 하 는 것 입 니 다.
이상 사용 한 dot 인 스 턴 스 대상 은 Dot 의 모든 속성 과 방법 을 가지 고 있 습 니 다.따라서 상기 에서 사용 한 방법의 문법 은 Dot 의 클래스 정 의 를 참고 할 수 있다.
또한 클래스 Dot 에서 files. py 의 File 류 를 계승 하기 때문에 위 에서 사용 하 는 dot. render 의 문법 은 File 류 에서 볼 수 있 습 니 다.
또한 File 류 에 view 방법 이 있 는 것 을 발견 할 수 있 습 니 다. 말 그대로 그림 을 보 여줄 수 있 습 니 다.즉, 위의 프로그램 에서 원 노드 나 연결 변 을 추가 할 때마다 호출 할 수 있다.
dot.view()  

효과 즉시 보기.
주: 더 편리 하 게 문법 을 보 는 방법 은 python ide 나 터미널 에서 보 는 것 입 니 다.
import graphviz
help(graphviz)

모든 속성 은 한 페이지 에 있 습 니 다. 이 보 기 는 더욱 직접적 이 고 여러 파일 에서 볼 필요 가 없습니다.
넓히다
위의 예 에서 사용 하 다.
print(dot.source)
#or
dot.source 

이 그림 을 그 리 는 dot 언어 를 얻 을 수 있 습 니 다.그러면 dot 언어 와 대응 하 는 그림 이 있 으 면 python 프로그램 을 어떻게 씁 니까?
Graghviz 홈 페이지 에 들 어가 갤러리 갤러리 를 찾 습 니 다.http://www.graphviz.org/Gallery.php
첫 번 째 예 cluster 로 설명 합 니 다. 다른 유사 성: Graphviz -图形可视化,python实现_第3张图片
위 에서 볼 수 있 듯 이 큰 그림 graph G 는 두 개의 키 그림 cluster 를 포함한다.0, cluster_1, 그리고 두 노드 start, end
두 개의 서브 맵 은 cluster 로 만0 예: 서브 맵 속성 은 style, color, label, 노드 설정 서브 맵 은 네 개의 노드 를 포함 하고 속성 설정 이 없습니다.
sub_g0 = Digraph(comment="process1",graph_attr={"style":'filled',"color":'lightgrey'},node_attr={"style":"filled","color":"white"})
sub_g0.node("a0","a0")
sub_g0.view()

start, end 노드 는 shape 속성 이 하나 밖 에 없습니다.
dot = Digraph()
dot.node("start",label="start",shape="Mdiamond")
dot.node("end",label="end",shape="Mdiamond")

전체 프로그램:
from graphviz import Digraph
grap_g = Digraph("G",format="pdf")


sub_g0 = Digraph(comment="process1",graph_attr={"style":'filled',"color":'lightgrey'},node_attr={"style":"filled","color":"red"})
sub_g0.node("a0","a0")
sub_g0.node("a1","a1")
sub_g0.node("a2","a2")
sub_g0.node("a3","a3")
sub_g0.edge("a0","a1")
sub_g0.edge("a1","a2")
sub_g0.edge("a2","a3")

subg0.edge("a3", "a0")

sub_g1 = Digraph(comment="process1",graph_attr={"style":'filled'})
sub_g1.node("B","b0")
sub_g1.node("C","b1")
sub_g1.node("D","b2")
sub_g1.node("E","b3")
sub_g1.edges(["BC","CD","DE"])

grap_g.node(
"start", label="start",shape="Mdiamond")
grap_g.node(
"end", label="end", shape="Mdiamond")

grap_g.subgraph(sub_g0)
grap_g.subgraph(sub_g1)
grap_g.edge("start","a0")
grap_g.edge("start","B")

grap_g.edge("a1","E")
grap_g.edge("D","a3")

grap_g.edge("a3","end")
grap_g.edge("E","end")

Graphviz -图形可视化,python实现_第4张图片 주의: 어떤 속성 이 실현 되 지 못 하 는 것 을 발견 하면 나중에 수정 하면 다시 수정 합 니 다.
이 사고방식 에 따라 갤러리 에서 다른 dot 언어 와 그림 을 python 으로 실현 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기