标签: pyqtgraph

使用 scipy.signal.spectrogram 在 pyqtgraph 中绘制 wavfile 的频谱

我有一个用于音乐和语音分析的 PyQt 加 pyqtgraph 程序,我想绘制 wav 文件的频谱(使用 scipy python 包计算)。我可以在 matplotlib 中完成,但由于 matplotlib 的性能,我需要切换到 pyqtgraph,但我找不到任何一致的方法来将 scipy.signal.spectrogram 的输出绘制到 pyqtgraph

谢谢!

python signal-processing scipy spectrogram pyqtgraph

2
推荐指数
1
解决办法
5885
查看次数

在课堂上制作 pyqtgraph 动画

我正在尝试编写一个程序,通过串口从 arduino 获取串行数据,并实时绘制它。我使用 matplotlib 编写了代码,但我希望对结果感到满意,所以我试图让它在 pyqtgraph 上工作(学习如何使用它的资源要少得多)。我的问题是代码显示了一个空图。似乎 _update 仅被调用一次,但是当我将其放入循环中时,图表甚至不显示。

\n\n

我编写了一些其他代码来实现我想要的功能,即实时绘制数据,在数据通过阈值后,它在数据上绘制新线,显示线性回归。我从这里得到了一个示例(https://github.com/JaFeKl/joystick_real_time_plot_with_pyqtgraph/blob/master/real_time_plot.py),因为我希望我的代码是可调用的(在函数中,但我无法让它工作.到目前为止,我正在从 python 中生成数据以简化调试

\n\n
import sys\nimport pyqtgraph as pg\nimport pyqtgraph.exporters\nfrom pyqtgraph.Qt import QtGui, QtCore\nimport numpy as np\n\nimport serial\n\n# test\nimport math\nimport time\n\n\nclass Graph(QtGui.QMainWindow):\n    def __init__(self, parent=None):\n        super(Graph, self).__init__(parent)\n        self.n = 3\n        self.mainbox = QtGui.QWidget()\n        self.setCentralWidget(self.mainbox)\n        self.mainbox.setLayout(QtGui.QVBoxLayout())\n\n        self.canvas = pg.GraphicsLayoutWidget()             # create GrpahicsLayoutWidget obejct  \n        self.mainbox.layout().addWidget(self.canvas)\n\n        #  Set up plot\n        self.analogPlot = self.canvas.addPlot(title=\'Signal from serial port\')\n        self.analogPlot.setYRange(-1,1123)                # set axis range\n        self.analogPlot.setXRange(-1,1123)\n        self.analogPlot.showGrid(x=True, y=True, alpha=0.5) # show Grid\n        x_axis = …
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph

2
推荐指数
1
解决办法
1478
查看次数

pyqtgraph中的极坐标系

我需要在笛卡尔坐标和极坐标中实现两个图。笛卡尔一切都很清楚,但是是否可以在 pyqtgraph 中制作极坐标系?

python pyqt pyqtgraph pyqt5

2
推荐指数
1
解决办法
3310
查看次数

将轴标签和标题添加到 PyQtGraph ImageView

我使用 PyQtGraph ImageView 来显示多维数据。

向此类 ImageView 添加轴标签和标题的最简单方法是什么?

我尝试将 LabelItem 添加到底层 ViewBox 中。我认为正确定位它需要破解底层布局。这是要走的路,还是有更简单的方法?

import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg

app = QtGui.QApplication([])

# make ImageView with test data
imv = pg.ImageView()
data = np.fromfunction(lambda i, j: np.sin(i/16)*j/128, (512, 512), dtype=float) \
     + np.random.normal(scale=0.2, size=(512, 512))
imv.setImage(data)

# add label
vbox = imv.getView()
vbox.addItem(pg.LabelItem("this is a nice label"))

imv.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

PyQtGraph ImageView 示例

python pyqt pyqtgraph

2
推荐指数
1
解决办法
5117
查看次数

尝试在 PyQt5 中的 pyqtgraph 绘图小部件中获取带有坐标显示的光标

我正在尝试在 PyQt5 的 pqytplot 图小部件中添加光标位置的读数。我发现这段代码可以实现我想要的功能,但是在一个独立的窗口中,所有这些都在一个程序文件中:

import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore

#generate layout
app = QtGui.QApplication([])
win = pg.GraphicsWindow()
label = pg.LabelItem(justify='right')
win.addItem(label)
p1 = win.addPlot(row=1, col=0)

data1 = [n**2 for n in range(100)]
p1.plot(data1, pen="r")

#cross hair
vLine = pg.InfiniteLine(angle=90, movable=False)
hLine = pg.InfiniteLine(angle=0, movable=False)
p1.addItem(vLine, ignoreBounds=True)
p1.addItem(hLine, ignoreBounds=True)


def mouseMoved(evt):
    pos = evt[0]  ## using signal proxy turns original arguments into a tuple
    if p1.sceneBoundingRect().contains(pos):
        mousePoint = p1.vb.mapSceneToView(pos)
        index = int(mousePoint.x())
        if index > 0 …
Run Code Online (Sandbox Code Playgroud)

cursor-position python-3.x pyqtgraph pyqt5

2
推荐指数
1
解决办法
2550
查看次数

如何平滑 pyqtgraph 中的图形?

我用 pyqtgraph 绘制了一个图表,现​​在我正在尝试“平滑”图表(而不是锯齿形),(我读到)应该与 一起使用antialias,但我找不到正确的“位置”以使其工作。

import sys
from PyQt5 import QtWidgets
import pyqtgraph as pg

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.plot()

    def plot(self):
        self.graphWidget = pg.PlotWidget()
        self.setCentralWidget(self.graphWidget)
        self.graphWidget.setBackground('w')
        pen = pg.mkPen(color=('b'), width=2)
        styles = {'color':'r', 'font-size':'15px'}

        self.graphWidget.setConfigOptions(antialias=True)  # AttributeError: setConfigOptions

        self.graphWidget.setLabel('left', 'x-values', **styles)
        self.graphWidget.setLabel('bottom', 'y-values', **styles)
        
        x_values = [1, 2, 3, 4, 5]
        y_values = [2, 1, 2, 4, 3]

        self.graphWidget.plot(x_values, y_values, pen=pen, symbol='o',
                                   symbolSize=8, symbolPen='k', symbolBrush='k')

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow() …
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph pyqt5

2
推荐指数
1
解决办法
1650
查看次数

如何在 PyQtGraph 中使用 TextItem.setText() 设置字体大小?

在 PyQtGraph 中创建要添加到 plotItem 的 TextItem 时,我知道可以使用 html 代码格式化文本,但是我想知道如何在通过 TextItem.setText( )?还是我需要销毁/重新创建一个 TextItem?

python formatting plot text pyqtgraph

1
推荐指数
1
解决办法
1491
查看次数

pyqtgraph:左侧多个y轴?

我在pyqtgraph中找到了MultiplePlotAxes示例,并用另外一个y轴扩展它(参见下面的代码).所以现在右侧有3个y轴.

有没有办法让所有3个y轴从右侧到左侧,以便左侧总共有4个y轴?:

因为例如 ax3 = pg.AxisItem('left')仅改变标签的方向和轴的刻度,而不改变轴相对于坐标原点的位置.

修改了MultiplePlotAxes-example

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

pg.mkQApp()

pw = pg.PlotWidget()
pw.show()
pw.setWindowTitle('pyqtgraph example: MultiplePlotAxes')
p1 = pw.plotItem
p1.setLabels(left='axis 1')


p2 = pg.ViewBox()
p1.showAxis('right')
p1.scene().addItem(p2)
p1.getAxis('right').linkToView(p2)
p2.setXLink(p1)
p1.getAxis('right').setLabel('axis2', color='#0000ff')


p3 = pg.ViewBox()
ax3 = pg.AxisItem('right')

p1.layout.addItem(ax3, 2, 3)
p1.scene().addItem(p3)

p4 = pg.ViewBox()
ax4 = pg.AxisItem('right')

p1.layout.addItem(ax4, 2, 4)
p1.scene().addItem(p4)

ax3.linkToView(p3)
p3.setXLink(p1)
ax3.setZValue(-10000)
ax3.setLabel('axis 3', color='#ff0000')

ax4.linkToView(p4)
p4.setXLink(p1)
ax4.setZValue(-10000)
ax4.setLabel('axis 4', color='#ff5555')


def updateViews():
    global p1, p2, …
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph

1
推荐指数
1
解决办法
3265
查看次数

如何更新实时绘图并使用按钮在 pyqtgraph 中进行交互?

我使用“滚动图”示例作为pyqtgraph.examples模板来创建一个图,该图显示了连续的正弦波。现在,我想使用按钮来改变正弦波的幅度。这就是我使用另一种结构的原因(参见下面的代码)。这不起作用,它只绘制静态正弦波。如何使用更新函数绘制连续正弦波?如何使用按钮更改幅度?我已经检查过这个这个但没有成功。

import sys
from PyQt4 import QtGui, QtCore
import numpy as np
import pyqtgraph as pg


class sinus_wave(QtGui.QWidget):

    def __init__(self):
        super(sinus_wave, self).__init__()

        self.initUI()


    def initPlot(self, plots):
        a = 10
        ptr1 = 30

        data1 = a*np.sin(np.linspace(0,30,121))
        plots.plot(data1)

        timer = pg.QtCore.QTimer()
        timer.timeout.connect(lambda: self.update(self,p1 = plots,data1= data1, ptr1 = ptr1))
        timer.start(50)

    def initUI(self):


        IncreaseButton = QtGui.QPushButton("Increase Amplitude")
        DecreaseButton = QtGui.QPushButton("Decrease Amplitude")
        p1 = pg.PlotWidget()

        hbox = QtGui.QVBoxLayout()  
        hbox.addWidget(p1)
        hbox.addWidget(IncreaseButton)
        hbox.addWidget(DecreaseButton)  

        self.initPlot(p1)
        self.setLayout(hbox)

        self.setGeometry(10, 10, 1000, 600)
        self.setWindowTitle('Sinuswave') …
Run Code Online (Sandbox Code Playgroud)

python pyqt4 pyqtgraph

1
推荐指数
1
解决办法
8815
查看次数

Python 的 PyQtGraph:是否可以有梯度填充图?

是否可以使用 PyQtGraph 生成看起来像这样的图?我知道如何创建填充图,但我找不到任何将渐变应用于填充区域的示例。

梯度填充图示例

python pyqtgraph

1
推荐指数
1
解决办法
1539
查看次数

将pyqtgraph图嵌入到QT .ui中?

首先,我希望您有耐心,因为我是这类项目的新手,并且我也希望不要问愚蠢的问题。话虽这么说,我的主要目标是为树莓派3创建一个UI,该UI将从电池和太阳能面板中感应电压,电流等。

由于我正在研究树莓派并且对Python3有所了解,因此我决定使用QTCreator,据我所知,可以通过pyqt将其转换为python3(https://nikolak.com/pyqt-qt-designer-getting-started/)。我将其安装在树莓派上,并创建了以下用户界面:

在拥有基本的用户界面之后,我使用pyuic5命令将.ui文件转换为.py,并且能够使用“ python3 main.py”打开用户界面,一切似乎都正确:

打开main.py文件后用户界面的外观

现在,我想在UI上绘制几张图(例如电压与时间的关系图)。我正在使用以下进行测试:

import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
win = pg.GraphicsWindow()
win.setWindowTitle('pyqtgraph example: Scrolling Plots')


p1 = win.addPlot(labels =  {'left':'Voltage', 'bottom':'Time'})
data1 = np.random.normal(size=10)
data2 = np.random.normal(size=10)
curve1 = p1.plot(data1, pen=(3,3))
curve2 = p1.plot(data2, pen=(2,3))
ptr1 = 0

def update1():
    global data1, curve1, data2, ptr1

    data1[:-1] = data1[1:]  # shift data in the array one sample left
                            # (see also: …
Run Code Online (Sandbox Code Playgroud)

python pyqt qt-designer python-3.x pyqtgraph

1
推荐指数
1
解决办法
4749
查看次数

PyQt mousePressEvent - 获取被点击的对象?

我正在使用 PyQt 和 PyQtGraph 来构建一个相对简单的绘图 UI。作为其中的一部分,我有一个图形视图(pyqtgraph 的 graphicslayoutwidget),其中包含由用户动态添加的 PlotItem。

我想要实现的是允许用户通过双击它来选择一个 PlotItem。

如果用户在小部件窗口中的某处双击,这很简单,但我似乎无法弄清楚如何返回点击的内容。

我的大多数搜索结果都试图为某些按钮重新实现 mousePressEvent。我已经阅读了一些关于事件过滤器的内容,但我不确定这是否是必要的解决方案。

我不确定还有哪些其他信息可能有助于回答这个问题,所以如果不清楚我要问什么,请告诉我,以便我进行澄清。

编辑:

复制本:

pyqtgraph:当我点击一个 PlotItem 时,我怎么知道哪个项目被点击了

python pyqt pyqtgraph qmouseevent

0
推荐指数
1
解决办法
7051
查看次数