안녕하세요.
오늘은 PyQt5에 matplotlib를 연동하는 방법에 대해 이야기하겠습니다.
제가 이번에 만든 필터를 구현하면서 애먹었던 부분 중 하나였던게
pyqt5에 plt를 연동시키는 것이였습니다.
결국 답이 레퍼런스 찾아보거나, stackoverflow를 통해 방법을 알아냈습니다.
우선 pyqt5에 matplotlib를 연동시키는 방법을 설명하겠습니다.
1. pyqt5에 plt 연동
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
우선 import 부분에 위에 문구를 추가해줍니다.
from matplotlib import pyplot as plt
self.fig = plt.figure(figsize=[4, 4])
a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)
plot이 두개 담겨있는 fig가 변수로 저장이 되어있겠죠?
사용법은 간단합니다.
위에 import 해준 라이브러리를 사용하기 위해 fig를 FigureCanvas에 담아주면 됩니다.
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib import pyplot as plt
self.fig = plt.figure(figsize=[4, 4])
a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)
self.canvas = FigureCanvas(self.fig)
정말 간단하죠?
2. pyqt5에 toolbar 연동
위의 사진들 많이 보셨죠?
self.fig.show() 하면 보이는 툴바입니다.
툴바는 plot을 만들어서 분석하기 위해 확대하교 움직이기 위해 사용합니다.
사용방법은 FigureCanvas랑 비슷합니다.
from matplotlib import pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
self.fig = plt.figure(figsize=[4, 4])
a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)
self.canvas = FigureCanvas(self.fig)
self.toolbar = NavigationToolbar(self.canvas, self)
네. 비슷하기는 하지만 인자가 하나 더 들어가있죠?
첫번 째 인자로 우리가 방금 연동시킨 FigureCanvas가 들어가네요?
두번 째 인자로는 부모 인자를 넣으라 하는군요. 부모인자라 하면은 뭘까요?
우리들은 pyqt5를 사용하기 전에 우리들은 QWidget을 상속받아 사용합니다.
제 프로그램을 예시로
이런식으로 QWidget을 상속받고, self로 초기화 시킵니다.
간단히 말해 parent 자리에 self를 넣어주면 됩니다.
3. Layout에 붙이기
2번까지 끝나셨으면 우리들에게는 두 개의 widget이 존재합니다.
self.canvas
self.toolbar
이제부터는 PyQt5의 기본 레이아웃 문제로 변하게 됩니다.
우선 저 같은 경우는 일단 Designer는 사용하지 않습니다.
exe를 만들기 어려울뿐더러 하나 하나 코딩 한 줄 넣는게 저에겐 덜 헷갈려서 코딩으로 적겠습니다.
위에 그림처럼 위젯을 붙이기 위해서는
수직으로 배치하는 QVBoxLayout (vertical)
lay = QVBoxLayout()
lay.addWidget(self.toolbar)
lay.addWidget(self.canvas)
짠!
만약 툴바를 아래로 내리고 싶으시면
lay = QVBoxLayout()
lay.addWidget(self.canvas)
lay.addWidget(self.toolbar)
짠!
두 위젯이 lay라는 레이아웃에 담겨 있습니다.
이제 show를 해줍시다.
self.setLayout(lay)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib import pyplot as plt
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
self.fig = plt.figure(figsize=[4, 4])
a = plt.subplot(2, 1, 1)
a1 = plt.subplot(2, 1, 2)
self.canvas = FigureCanvas(self.fig)
self.toolbar = NavigationToolbar(self.canvas, self)
lay = QVBoxLayout()
lay.addWidget(self.canvas)
lay.addWidget(self.toolbar)
self.setLayout(lay)
이런식으로 pyqt5에 matplot 연동시키시면 됩니다.
'Python > Application' 카테고리의 다른 글
[파이썬 응용] 7탄 : mat파일 불러오기(python에 matlab연동) (0) | 2020.02.28 |
---|---|
[파이썬 응용] 6탄 PyQt5 기본구조에 대해 알아보기 (0) | 2020.02.27 |
[파이썬 응용] 4탄 Pyinstaller : exe실행파일 만들기, 오류 해결 (0) | 2020.02.25 |
[파이썬 응용] 1. Filter Adapter Application (0) | 2020.02.24 |
[파이썬 응용] 4탄 SpeechRecognition : 6줄로 음성 인공지능 구현하기(STT :Speech to Text) (1) | 2020.02.18 |