์๋ ํ์ธ์.
์ค๋์ 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 ์ฐ๋์ํค์๋ฉด ๋ฉ๋๋ค.