Перемещение точек графика pyqtgraph
Я бы хотел узнать как я могу переместить точки графика?
Я создаю график через pyqtgraph.
У меня в окне получается график вида:
Теперь вопрос: как мне сделать так, чтобы при нажатии на фиолетовые точки, у меня тянулся график так, как я захочу?
Т.е., я хочу при нажатии левой кнопкой мыши на точку осуществить перетягивание.
Как это сделать?
Уже и в документации рылся, но так ничего и не нашёл. У меня есть отдельный класс. Я его представлю ниже.
class Graphic(pyqtgraph.PlotWidget,pyqtgraph.GraphicsScene,pyqtgraph.GraphicsWidget,pyqtgraph.ScatterPlotItem):#,pyqtgraph.QGraphicsItems):
def __init__(self):
pyqtgraph.setConfigOption('background', 'w')
pyqtgraph.setConfigOption('foreground', 'k')
super().__init__()
#self.enableAutoRange(None,True)
self.setLabel('left', 'Y')#, units='V')
self.setLabel('bottom', 'X')#, units='s')
self.setMenuGraph()
self.setMenuEnabled(False)
#self.sigPointsClicked.connect(self.gausclicked)
self.setAcceptDrops(True)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Ваша задача может выглядеть примерно так:
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
pg.setConfigOptions(antialias=True)
w = pg.GraphicsWindow()
w.setWindowTitle('Draggable')
class Graph(pg.GraphItem):
def __init__(self):
self.dragPoint = None
self.dragOffset = None
pg.GraphItem.__init__(self)
def setData(self, **kwds):
self.data = kwds
if 'pos' in self.data:
npts = self.data['pos'].shape[0]
self.data['adj'] = np.column_stack(
(np.arange(0, npts-1), np.arange(1, npts))
)
self.data['data'] = np.empty(npts, dtype=[('index', int)])
self.data['data']['index'] = np.arange(npts)
self.updateGraph()
def updateGraph(self):
pg.GraphItem.setData(self, **self.data)
def mouseDragEvent(self, ev):
if ev.button() != QtCore.Qt.LeftButton:
ev.ignore()
return
if ev.isStart():
pos = ev.buttonDownPos()
pts = self.scatter.pointsAt(pos)
if len(pts) == 0:
ev.ignore()
return
self.dragPoint = pts[0]
ind = pts[0].data()[0]
self.dragOffset = self.data['pos'][ind][1] - pos[1]
elif ev.isFinish():
self.dragPoint = None
return
else:
if self.dragPoint is None:
ev.ignore()
return
ind = self.dragPoint.data()[0]
self.data['pos'][ind][1] = ev.pos()[1] + self.dragOffset
self.data['pos'][ind][0] = ev.pos()[0] + self.dragOffset
self.updateGraph()
ev.accept()
g = Graph()
v = w.addPlot()
v.addItem(g)
# v <---- попробуйте изменить значение
x = np.linspace(1, 10, 3)
pos = np.column_stack((x, np.sin(x)))
g.setData(pos=pos, size=10, pxMode=True)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()


