Отображение координат точки на графике с помощью курсора

Рейтинг: -3Ответов: 1Опубликовано: 23.04.2023

Пытаюсь сделать нормальное отображение координат точки на графике при помощи курсора. Пока что использую следующий код:

 def mouseMoved(self, evt):
        pos = evt
        if self.plotWidget.sceneBoundingRect().contains(pos):
            mousePoint = self.plotWidget.plotItem.vb.mapSceneToView(pos)
            index = int(mousePoint.x())
            if index > 0 and index < len(self.plotx):
            # if index > 0 and index < self.MFmax:
                self.cursorlabel.setHtml(
                    "<span style='font-size: 12pt'>x={:0.1f}, \
                     <span style='color: red'>y={:0.1f}</span>".format(
                mousePoint.x(), mousePoint.y()))
            self.vLine.setPos(mousePoint.x())
            self.hLine.setPos(mousePoint.y())

Однако, этот код просто показывает координаты курсора относительно графика. Вопрос. Как сделать так, чтобы отображались координаты точки на графике только при наведении на эту точку? Если можно, то реализовать такое решение, где отслеживалась координата X курсора относительно графика и отображалась соответствующая координата Y.

Заранее всем спасибо, всем PEACE.

P.S. график строится через массив Numpy

Ответы

▲ 0

Решил вопрос сам. Код был переделан в следующий вид

x = np.linspace(0, 180, 18000)

self.plotx = x
self.ploty = arr

def mouseMoved(self, evt):
    pos = evt
    if self.ui.graphicsView.sceneBoundingRect().contains(pos):
        mousePoint = self.ui.graphicsView.plotItem.vb.mapSceneToView(pos)
        mx = abs(np.ones(len(self.plotx)) * mousePoint.x() - self.plotx)
        index = mx.argmin()
        if index >= 0 and index < len(self.plotx):
            self.cursorlabel.setHtml(
                "<span style='font-size: 9pt'>Angle (2*Theta)={:0.1f}, \
                 <span style='color: black'>Intencivity (Angstrom)={:0.1f}</span>".format(
                self.plotx[index], self.ploty[index])
            )
        self.vLine.setPos(self.plotx[index])
        self.hLine.setPos(self.ploty[index])

Массив arr является массивом значений. Если обобщить все решение, то теперь отображаются координаты точки графика, а не курсора (отображаются координаты точки, находящейся по нормали к курсору)