import random import sys from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from matplotlib.animation import FuncAnimation class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Real-time data plot") self.setGeometry(50, 50, 800, 600) central_widget = QWidget(self) self.setCentralWidget(central_widget) # Create a 3x2 grid layout grid_layout = QGridLayout(central_widget) # Create 6 figures and canvases self.figures = [Figure() for _ in range(6)] self.canvases = [FigureCanvas(fig) for fig in self.figures] # Add the canvases to the grid layout for i, canvas in enumerate(self.canvases): row, col = i // 2, i % 2 grid_layout.addWidget(canvas, row, col) # Add some content to the figures self.lines = [] for i, fig in enumerate(self.figures): ax = fig.add_subplot(111) line, = ax.plot([], [], '-o') self.lines.append(line) ax.set_title("Graph {}".format(i + 1)) ax.set_xlim(0, 10) ax.set_ylim(0, 100) # Start the animation self.timer = QTimer() self.timer.setInterval(50) self.timer.timeout.connect(self.update_plots) self.timer.start() def update_plots(self): for i, line in enumerate(self.lines): xdata = line.get_xdata() ydata = line.get_ydata() xdata.append(xdata[-1] + 1 if xdata else 0) ydata.append(random.randint(0, 100)) line.set_data(xdata, ydata) self.figures[i].canvas.draw() if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())