Graphviz - 도형 시각 화, python 구현
자체 시스템 은 Mac OSX EI Capitan python 버 전 은 python 3.5 64bit 입 니 다.
Graphiz 홈 페이지 에서 본 mac os 의 버 전 은 비교적 낡 아서 현재 시스템 의 버 전 을 찾 지 못 했 습 니 다.그 소개 에 의 하면http://www.graphviz.org/Download_macos. php 마지막 으로 가장 간단 하고 직접적인 방법 을 선택 하고 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)
출력 그림
판독: 상기 프로그램 이 한 번 에 출력 을 완성 하면 도형 을 직접 출력 할 수 있 고 직접적인 느낌 을 받 을 수 있 습 니 다.그러나 원본 코드 를 보면 모두 다섯 개의 파일 이 있 음 을 알 수 있 습 니 다: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 로 설명 합 니 다. 다른 유사 성:
위 에서 볼 수 있 듯 이 큰 그림 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")
주의: 어떤 속성 이 실현 되 지 못 하 는 것 을 발견 하면 나중에 수정 하면 다시 수정 합 니 다.
이 사고방식 에 따라 갤러리 에서 다른 dot 언어 와 그림 을 python 으로 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.