YOGYUI

Python으로 순서도 그리기 (schemdraw) 본문

Software/Python

Python으로 순서도 그리기 (schemdraw)

요겨 2021. 1. 27. 14:50
반응형

Flowchart를 웹에서 보여줘야 할 필요가 생겨서 이리저리 검색하다가 python, matplotlib 기반 라이브러리인 schemdraw를 한번 써보기로 했다

schemdraw.readthedocs.io/en/latest/

 

Schemdraw documentation — SchemDraw 0.8 documentation

 

schemdraw.readthedocs.io

 

전자회로, 논리회로, 신호처리 등 다양한 종류의 schematics를 그리기 위한 Element들이 구현돼있다

(Latex도 지원되는듯)

 

출처: schemdraw.readthedocs.io/en/latest/
출처: schemdraw.readthedocs.io/en/latest/
출처: schemdraw.readthedocs.io/en/latest/

예제코드를 보면 알겠지만, 한땀한땀 노가다로 코딩해줘야된다

사용성을 높이려면 고수준의 커스터마이징이 필요할 것 같다

 

각설하고, 다음과 같이 Flowchart도 어렵지 않게 구현할 수 있다

# test.py
# author: yogyui
import schemdraw
from schemdraw import flow

d = schemdraw.Drawing()
d.add(flow.Start(w=2, h=2, label="START"))
d.add(flow.Arrow('down', l=2, color='red'))
cond1 = d.add(flow.Decision(S="No", E="YES", label="Hungry?"))

d.add(flow.Arrow('down', xy=cond1.S, l=2))
cond2 = d.add(flow.Decision(W="No", E="Yes", label="Sleepy?"))

d.add(flow.Line('left', xy=cond2.W, l=1))
d.add(flow.Arrow('down', l=2))
d.add(flow.Box(label="Coding !!"))

d.add(flow.Line('right', xy=cond2.E, l=1))
d.add(flow.Arrow('down', l=2))
box = d.add(flow.Box(label="Drink\nRed Bull !!"))
d.add(flow.Arrow('left', xy=box.W, l=3))

d.add(flow.Line('right', xy=cond1.E, l=5, color='red'))
d.add(flow.Arrow('down', l=1, color='red'))
cond3 = d.add(flow.Decision(S="No", E="Yes", label="Have\nMoney?"))

d.add(flow.Arrow('down', xy=cond3.S, l=3))
d.add(flow.Box(label="Coding !!"))

d.add(flow.Line('right', xy=cond3.E, l=2, color='red'))
d.add(flow.Arrow('down', l=4, color='red'))
d.add(flow.Box(label="Chicken !!", color='red'))

d.draw(show=True)

결과물

Flowchart 결과물

Matplotlib 기반이기 때문에 jupyter나 spyder같은 IDE랑 연동해서 쓰기도 편하고 pyqt나 tk같은 GUI 백엔드랑 연동해서 어플리케이션에 집어넣기도 수월하다

 

[장점] 회로도나 순서도 단순히 스크린샷 찍은거랑은 확연히 다른 화질의 schematic을 제공할 수 있다

        문서화가 잘되어 있다

        Matplotlib에 익숙하다면 사용법을 빠르게 익힐 수 있다 (Element parameter)

[단점] HSPICE급의 노가다가 필요하다 (왠만하면 변경할 일 없는 도면에 사용하는게 좋을 듯)

반응형