Как сделать график-радар на PyQt5?

Как сделать такой график-радар, на котором бы отображались точки. А при обновление через определенное время обновлялись и данные точек.

введите сюда описание изображения


Ответы (1 шт):

Автор решения: S. Nick

Одно из возможных решений, может выглядеть примерно так:

import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure

       
class GraphInit(FigureCanvas):
    def __init__(self, parent=None):
        fig = Figure()
        self.axes = fig.add_subplot(111, projection="polar")
        self.compute_initial_figure()

        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)


class GraphPopulate(GraphInit):
    def compute_initial_figure(self):
        self.r =[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
        angles = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        self.axes.plot(angles, self.r, 'bo', ms=5)
        
    def _polar(self):
        self.axes.clear()
        for i in range(20):
            angles = random.choices(range(50), k=10)
            ms = random.randint(1, 7)
            self.axes.plot(angles, self.r, 'bo', ms=ms)
        self.draw()


class GUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralwidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralwidget)
        self.setMinimumSize(QtCore.QSize(270, 270))
        
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.sc = GraphPopulate(self.widget)
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.addWidget(self.sc)
        
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_polar)
        self.timer.start(1000)
        
    def update_polar(self):
        self.sc._polar()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = GUI()
    w.resize(600, 600)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка