πŸ“Š Как Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ matplotlib Π² pyqt: практичСскоС руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Для вставки Matplotlib Π² PyQt Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс FigureCanvasQTAgg ΠΈΠ· модуля matplotlib.backends.backend_qt5agg. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

    from PyQt5 import QtWidgets
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    import matplotlib.pyplot as plt

    class MyWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ вставки Matplotlib Π² PyQt")
            self.setGeometry(100, 100, 800, 600)

            # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Matplotlib
            fig = plt.figure()
            ax = fig.add_subplot(111)
            ax.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])

            # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра холста Matplotlib
            canvas = FigureCanvas(fig)
            canvas.setParent(self)

            # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ холста Π² Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ PyQt
            self.setCentralWidget(canvas)

    if __name__ == "__main__":
        import sys

        app = QtWidgets.QApplication(sys.argv)
        window = MyWindow()
        window.show()

        sys.exit(app.exec_())
    

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ matplotlib Π² PyQt?

Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° основС PyQt ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, построСнныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ matplotlib, Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых способов вставки Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² matplotlib Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PyQt.

Π¨Π°Π³ 1: Установка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас установлСны Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PyQt5 ΠΈ matplotlib. Если ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ Π½Π΅ установлСны, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:


        pip install PyQt5
        pip install matplotlib
    

Π¨Π°Π³ 2: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° прилоТСния PyQt

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .py ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ для создания ΠΎΠΊΠ½Π° прилоТСния PyQt:


        import sys
        from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
        from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
        from matplotlib.figure import Figure
        
        class MainWindow(QMainWindow):
            def __init__(self):
                super().__init__()
                self.setWindowTitle("Π“Ρ€Π°Ρ„ΠΈΠΊ matplotlib Π² PyQt")
    
                central_widget = QWidget(self)
                self.setCentralWidget(central_widget)
    
                layout = QVBoxLayout(central_widget)
    
                # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Figure ΠΈΠ· matplotlib
                self.figure = Figure()
    
                # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° FigureCanvas, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для отобраТСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ°
                self.canvas = FigureCanvas(self.figure)
    
                # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΠΌΠ°ΠΊΠ΅Ρ‚
                layout.addWidget(self.canvas)
    
                # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° осСй для Π³Ρ€Π°Ρ„ΠΈΠΊΠ°
                self.axes = self.figure.add_subplot(111)
    
                # Вставка здСсь ΠΊΠΎΠ΄Π° для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² matplotlib
    
        if __name__ == "__main__":
            app = QApplication(sys.argv)
            window = MainWindow()
            window.show()
            sys.exit(app.exec_())
    

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ "Вставка здСсь ΠΊΠΎΠ΄Π° для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² matplotlib". ΠœΡ‹ вСрнСмся ΠΊ этой части ΠΊΠΎΠ΄Π° ΠΏΠΎΠ·ΠΆΠ΅.

Π¨Π°Π³ 3: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² matplotlib. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ "Вставка здСсь ΠΊΠΎΠ΄Π° для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² matplotlib" ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:


        import numpy as np
        
        # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для Π³Ρ€Π°Ρ„ΠΈΠΊΠ°
        x = np.linspace(0, 10, 100)
        y = np.sin(x)
        
        # ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ…
        self.axes.plot(x, y)
        
        # ОбновлСниС Π³Ρ€Π°Ρ„ΠΈΠΊΠ°
        self.canvas.draw()
    

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π΄Π°Π½Π½Ρ‹Π΅ для Π³Ρ€Π°Ρ„ΠΈΠΊΠ° - массивы x ΠΈ y, Π° Π·Π°Ρ‚Π΅ΠΌ строим Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° plot ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° осСй (self.axes). Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ draw() экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° FigureCanvas, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π² ΠΎΠΊΠ½Π΅ прилоТСния PyQt.

Π¨Π°Π³ 4: Запуск прилоТСния

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ запуститС Π΅Π³ΠΎ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ прилоТСния PyQt с встроСнным Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ matplotlib. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ внСшний Π²ΠΈΠ΄ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ подписи осСй, Π»Π΅Π³Π΅Π½Π΄Ρƒ ΠΈ Ρ‚. Π΄., ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ matplotlib.

Π’ΠΎΡ‚ ΠΈ всС! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ matplotlib Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PyQt. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов достиТСния этой Ρ†Π΅Π»ΠΈ, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ свои потрСбности.

Π£Π΄Π°Ρ‡ΠΈ с вашими Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ Π½Π° основС PyQt ΠΈ matplotlib!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Python ΠΈ Matplotlib ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ PyQt

#1. Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ основныС возмоТности | Matplotlib ΡƒΡ€ΠΎΠΊΠΈ

PyQt5 Matplotlib Qt Designer

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ“Š Как Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ matplotlib Π² pyqt: практичСскоС руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ