2016-07-27 4 views
0

У меня строятся данные, и мне нужно отобразить его преобразование Фурье в реальном времени. Щелчок правой кнопкой мыши по сюжету и переход через меню «Параметры графика» позволяют мне выбрать режим «Спектр мощности», но есть ли способ активировать этот режим, когда виджет участка создается в первую очередь? Мне нужно преобразовать Фурье, чтобы он отображался без необходимости просмотра интерактивных меню. Спасибо за вашу помощь.Как установить виджет графика в режим Power Spectrum в PyQtGraph?

ответ

1

Похоже, это было там какое-то время, но так как это то, что другие могут в конечном итоге извлечь выгоду из, я добавлю свои 2 цента:

Самый простой способ я нашел, чтобы выполнить это с программным ударяя флажок сразу после создания сюжета. Созданный PlotItem имеет меню self.ctrl, так что:

pitem.ctrl.fftCheck.setChecked(True) 

должен сделать трюк.

pitem - это ссылка, возвращаемая методом addPlot GraphicsLayout. Если вы посмотрите на Plotting.py в обеспеченных их примерах, «https://github.com/pyqtgraph/pyqtgraph/blob/develop/examples/Plotting.py» линии 58:

p6 = win.addPlot(title="Updating plot") 

p6 в этом случае является PlotItem, поэтому, добавив следующую строку в этом случае:

p6.ctrl.fftCheck.setChecked(True) 

сделал бы это.

Для второго способа выполнить, также отметить, следующая строка в примере (строка 59):

curve = p6.plot(pen='y') 

Можно выполнить режим БПФ с помощью ссылки PlotDataItem вернулся туда через:

curve.setFftMode(True) 

Но это фактически оставляет галочку в меню без отметки и может быть немного запутанной.

Однако третий путь на линии 64:

curve.setData(data[ptr%10]) 

который стал бы:

curve.setData(data[ptr%10],fftMode=True) 

Это все взаимоисключающими, поэтому выполнение любой должен работать, но с последними 2-х вариантов его оставляет галочку в меню без отметки, так что снова вариант 1 - ваш лучший выбор.

+0

Я хотел бы отметить, что этот вариант очень ограниченный, если вы не решите подкласс PlotDataItem повторно выполнить свой БПФ. В большинстве случаев вам лучше использовать numpy для выполнения FFT до графика и просто используя pyqtgraph для построения ответа. – segFaultCoder

0

Просто добавьте этот первый предоставленный параметр, если вы используете класс PlotWidget вместо PlotItem (если вы, как и я, используете QtDesigner в сочетании с Pyqtgraph для создания вашего графического интерфейса), это также можно сделать, вы просто нужно добавить getPlotItem() для доступа к атрибуту ctrl.

Например, если мой пункт сюжет называется self.ui4.plot_1 (plot_1 это метка или название, установленное в QtDesigner для сюжета PlotWidget), вы должны написать:

self.ui4.plot_1.getPlotItem().ctrl.fftCheck.setChecked(True) 
Смежные вопросы