{"id":8343,"date":"2019-10-28T22:33:49","date_gmt":"2019-10-28T13:33:49","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=8343"},"modified":"2020-05-28T10:07:02","modified_gmt":"2020-05-28T01:07:02","slug":"pyqt5-matplotlib%ec%9d%98-%ec%b0%a8%ed%8a%b8%eb%a5%bc-widget%ec%9c%bc%eb%a1%9c-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=8343","title":{"rendered":"[PyQt5] MatplotLib\uc758 \ucc28\ud2b8\ub97c Widget\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30"},"content":{"rendered":"<p>PyQt\uc5d0\uc11c \ucc28\ud2b8\ub97c \uc704\uc82f\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uba3c\uc800 \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/10\/PtQt5_Matplotlib1.png\" alt=\"\" width=\"1824\" height=\"1468\" class=\"aligncenter size-full wp-image-8349\" \/><\/p>\n<p>\ud558\ub2e8\uc5d0 \ucef4\ubcf4\ubc15\uc2a4\ub97c \ud1b5\ud574 2\uac00\uc9c0 \ud56d\ubaa9\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\ub294\ub370\uc694. \ud56d\ubaa9\uc744 \uc120\ud0dd\ud560\ub54c\ub9c8\ub2e4 \ud574\ub2f9\ub418\ub294 \ud56d\ubaa9\uc758 \uadf8\ub798\ud504\uac00 \uc0c1\ub2e8\uc5d0 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 \uc774\ub97c \uc704\ud55c UI \uad6c\uc131\uc744 \uc704\ud574 \uc544\ub798\uc640 \uac19\uc740 \ucf54\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport sys\r\nimport numpy as np\r\nfrom PyQt5.QtWidgets import *\r\nimport matplotlib.pyplot as plt\r\nfrom mpl_toolkits.mplot3d import Axes3D\r\nfrom matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas\r\n\r\nclass MyWindow(QWidget):\r\n    def __init__(self):\r\n        super().__init__()\r\n        self.initUI()\r\n\r\n        self.setLayout(self.layout)\r\n        self.setGeometry(200, 200, 800, 600)\r\n\r\n    def initUI(self):\r\n        self.fig = plt.Figure()\r\n        self.canvas = FigureCanvas(self.fig)\r\n        \r\n        layout = QVBoxLayout()\r\n        layout.addWidget(self.canvas)\r\n\r\n        cb = QComboBox()\r\n        cb.addItem('Graph1')\r\n        cb.addItem('Graph2')\r\n        cb.activated[str].connect(self.onComboBoxChanged)\r\n        layout.addWidget(cb)\r\n\r\n        self.layout = layout\r\n\r\n        self.onComboBoxChanged(cb.currentText())\r\n\r\n    def onComboBoxChanged(self, text):\r\n        if text == 'Graph1':\r\n            self.doGraph1()\r\n        elif text == 'Graph2':\r\n            self.doGraph2()\r\n\r\n    def doGraph1(self):\r\n        ....\r\n\r\n    def doGraph2(self):\r\n        ....\r\n            \r\nif __name__ == \"__main__\":\r\n    app = QApplication(sys.argv)\r\n    window = MyWindow()\r\n    window.show()\r\n    app.exec_()\r\n<\/pre>\n<p>Qt5\uc5d0\uc11c Matplot\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 matplotlib.backends.backend_qt5agg \ud328\uc774\uc9c0\uc758 FigureCanvasQTAgg\ub77c\ub294 \uc774\ub984\uc758 \uc704\uc82f \ud074\ub798\uc2a4\uac00 \ud544\uc694\ud558\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. MyWindow \ud074\ub798\uc2a4\uc758 doGraph1\uacfc doGraph2 \ud568\uc218\uc758 \ucf54\ub4dc\uac00 \ud575\uc2ec\uc778\ub370, \uadf8 \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\n   def doGraph1(self):\r\n        x = np.arange(0, 10, 0.5)\r\n        y1 = np.sin(x)\r\n        y2 = np.cos(x)\r\n        \r\n        self.fig.clear()\r\n\r\n        ax = self.fig.add_subplot(111)\r\n        ax.plot(x, y1, label=\"sin(x)\")\r\n        ax.plot(x, y2, label=\"cos(x)\", linestyle=\"--\")\r\n        \r\n        ax.set_xlabel(\"x\")\r\n        ax.set_xlabel(\"y\")\r\n        \r\n        ax.set_title(\"sin & cos\")\r\n        ax.legend()\r\n        \r\n        self.canvas.draw()\r\n\r\n    def doGraph2(self):\r\n        X = np.arange(-5, 5, 0.25)\r\n        Y = np.arange(-5, 5, 0.25)\r\n        X, Y = np.meshgrid(X, Y)\r\n        Z = X**2 + Y**2\r\n        \r\n        self.fig.clear()\r\n        \r\n        ax = self.fig.gca(projection='3d')\r\n        ax.plot_wireframe(X, Y, Z, color='black')\r\n\r\n        self.canvas.draw() \r\n<\/pre>\n<p>doGraph2 \ud568\uc218\uc5d0 \ub300\ud55c \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc774 \ud568\uc218\uc758 \uc2e4\ud589\uc740 \ucef4\ubcf4\ubc15\uc2a4\uc758 \ud56d\ubaa9 \uc911 Graph2\ub97c \uc120\ud0dd\ud588\uc744\ub54c \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/10\/PyQt5_Matplotlib2.png\" alt=\"\" width=\"1824\" height=\"1468\" class=\"aligncenter size-full wp-image-8351\" \/><\/p>\n<p>\ucc38\uace0\ub85c \uc774 \uae00\uc758 \ucc28\ud2b8\ub294 \uc544\ub798\uc758 \uae00\uc744 \ucc38\uace0\ub85c \ud558\uc5ec \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"3K4aMhUh2A\"><p><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=7353\">\ud30c\uc774\uc36c\uc758 matplotlib \ub178\ud2b8<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;\ud30c\uc774\uc36c\uc758 matplotlib \ub178\ud2b8&#8221; &#8212; GIS Developer\" src=\"http:\/\/www.gisdeveloper.co.kr\/?p=7353&#038;embed=true#?secret=2JdNMPuYyO#?secret=3K4aMhUh2A\" data-secret=\"3K4aMhUh2A\" width=\"525\" height=\"296\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PyQt\uc5d0\uc11c \ucc28\ud2b8\ub97c \uc704\uc82f\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uba3c\uc800 \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ud558\ub2e8\uc5d0 \ucef4\ubcf4\ubc15\uc2a4\ub97c \ud1b5\ud574 2\uac00\uc9c0 \ud56d\ubaa9\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\ub294\ub370\uc694. \ud56d\ubaa9\uc744 \uc120\ud0dd\ud560\ub54c\ub9c8\ub2e4 \ud574\ub2f9\ub418\ub294 \ud56d\ubaa9\uc758 \uadf8\ub798\ud504\uac00 \uc0c1\ub2e8\uc5d0 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \uba3c\uc800 \uc774\ub97c \uc704\ud55c UI \uad6c\uc131\uc744 \uc704\ud574 \uc544\ub798\uc640 \uac19\uc740 \ucf54\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4. import sys import numpy as np from PyQt5.QtWidgets import * import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=8343\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[PyQt5] MatplotLib\uc758 \ucc28\ud2b8\ub97c Widget\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131,1],"tags":[],"class_list":["post-8343","post","type-post","status-publish","format-standard","hentry","category-python","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8343"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8343\/revisions"}],"predecessor-version":[{"id":9364,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8343\/revisions\/9364"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8343"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}