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_())