我正在使用pyqtgraph,我想在InfiniteLines的图例中添加一个项目.
我已经调整了示例代码来演示:
# -*- coding: utf-8 -*-
"""
Demonstrates basic use of LegendItem
"""
import initExample ## Add path to library (just for examples; you do not need this)
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
plt = pg.plot()
plt.setWindowTitle('pyqtgraph example: Legend')
plt.addLegend()
c1 = plt.plot([1,3,2,4], pen='r', name='red plot')
c2 = plt.plot([2,1,4,3], pen='g', fillLevel=0, fillBrush=(255,255,255,30), name='green plot')
c3 = plt.addLine(y=4, pen='y')
# TODO: add legend item indicating "maximum value"
## Start Qt event loop unless running in interactive …
Run Code Online (Sandbox Code Playgroud) 我尝试了pg.close(),但是没有用,在手册中找不到。我以循环方式生成图,因此我想在每个循环结束时将其全部关闭(取而代之的是,它将弹出一个新窗口,直到我的计算机崩溃为止)。
我正在一个项目中,我将不得不分析来自设备的信号。我有一个图书馆在工作,可以从设备中获取数据。到目前为止,我正在收集数据,然后将其绘制出来。我对构建实时数据监控器感兴趣,该监控器可以实时绘制图形。搜索后,我发现PyQtGraph非常适合该任务。我对Qt不熟悉,因此我正在寻找可以根据需要进行修改的示例。PyQtGraph文档中提供的一些示例可实时更新绘图,但我需要一个实时监控器(Live Monitor),该图形在不断接收数据的同时向右移动。
如果它像一个已知的连续函数,我可以更新输入x - w*t
与t
暂且以获得波向右移动。但这是离散的数据,因此我不确定如何使用PyQtGraph使其工作。因此,如果有人可以提出一些建议,那就太好了。
截至目前,这就是我所拥有的
码
app = QtGui.QApplication([])
#mw = QtGui.QMainWindow()
#mw.resize(800,800)
win = pg.GraphicsWindow(title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p6 = win.addPlot(title="Updating plot")
curve = p6.plot(pen='r')
X_axis = numpy.linspace(0,100,12800)
#'data' is my required y_axis containing 12800 values
ydata = np.array_split(data,50)
xdata = np.array_split(X_axis,50)
ptr = 0
def update():
global curve, data, ptr, p6
curve.setData(xdata[ptr%50],ydata[ptr%50])
ptr += 1
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(1000)
Run Code Online (Sandbox Code Playgroud)
这是每2秒更新一次数据,但是我希望它向右移动。
我知道以前曾多次询问过这个问题.我阅读了所有这些主题,我的情况似乎有所不同.遇到这种麻烦的每个人都有一些直截了当的原因,我认为我已经排除了这些原因,例如:
下面我有一个演示问题的最小代码示例.请注意,我没有启动任何线程或计时器.我还设置了每个小部件的父级.如果我删除了图形窗口小部件,问题就会消失,所以人们很想责怪pyQtGraph,但是,如果我包含了绘图窗口小部件但排除了所有空白选项卡(即除了tabCatchaTiger之外的每个选项卡),问题也会消失,那就是似乎证明了pyQtGraph.
版本:
测试用例:
from PyQt4 import Qt, QtGui, QtCore
import PyQt4.Qwt5 as Qwt
import pyqtgraph as pg
pg.functions.USE_WEAVE = False # Lets pyqtgraph plot without gcc
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
# GUI for visualizing data from database
class crashyGUI(QtGui.QWidget) :
def __init__(self) :
# Make the window
QtGui.QWidget.__init__(self)
self.resize(700, QtGui.QDesktopWidget().screenGeometry(self).height()*.85)
self.setWindowTitle('Data Visualization')
# Create tab interface
tabWidget = QtGui.QTabWidget(self)
# define the tab …
Run Code Online (Sandbox Code Playgroud) 在 python 中使用 pyqtgraph 模块时遇到问题。当我将白色背景颜色添加到 glscatterplot 时,散点就会消失。就像如果背景颜色被添加到散点图的颜色中,那么一切都是白色的。这是我使用的一段代码:
w = gl.GLViewWidget()
w.setBackgroundColor('w')
w.show()
sp3 = gl.GLScatterPlotItem(pos=np.transpose(pos3), color=rgba_img, size=1, pxMode=False)
w.addItem(sp3)
Run Code Online (Sandbox Code Playgroud)
如果我在 setBackgroundColor 方法中将 ('w') 替换为 ('k'),则分散的颜色很好,背景为黑色。有没有其他人遇到过这个问题?
我正在使用 PyQtGraph 来快速可视化我的数据采集。为此,我不断地使用while
循环重绘数据。此代码的简化版本如下:
import time
import numpy
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
x = numpy.linspace(-2 * numpy.pi, 2 * numpy.pi, 1000)
y = numpy.cos(x)
# Plot
win = pg.GraphicsWindow()
win.resize(800, 800)
p = win.addPlot()
p.plot(x, y, pen = "y")
i = 0
while i < 5000:
start_time = time.time()
noise = numpy.random.normal(0, 1, len(y))
y_new = y + noise
p.plot(x, y_new, pen = "y", clear = True)
p.enableAutoRange("xy", False)
pg.QtGui.QApplication.processEvents()
i += 1
end_time …
Run Code Online (Sandbox Code Playgroud) 我已经用 pyqtgraph 绘制了一个 3D 图,我想保存/导出它。在 3D 绘图上单击鼠标右键不会打开任何允许我保存绘图的上下文菜单。http://www.pyqtgraph.org/documentation/exporting.html 上的文档告诉我如何从程序中保存/导出,但按照 3D 结果的说明保存黑色图像。
这是我的代码的相关部分:
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import numpy as np
import pyqtgraph.exporters
app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.show()
w.setCameraPosition(distance=50)
g = gl.GLGridItem()
g.scale(2,2,1)
g.setDepthValue(10)
w.addItem(g)
z=np.genfromtxt('../mydata.txt')
p1 = gl.GLSurfacePlotItem(z=z, shader='shaded', color=(0.5, 0.5, 1, 1))
p1.scale(0.1, 0.1, 0.1)
p1.translate(-0, 0, 0)
w.addItem(p1)
w.grabFrameBuffer().save('test.png')
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
Run Code Online (Sandbox Code Playgroud)
mydata.txt 包含浮点值的二维数组。该图正确显示在我的屏幕上。有没有人成功地从 …
是否有可能获得PyQtGraph的滑块小部件?因此,例如一个或多个小部件可以控制绘图中的参数.就像下面这个例子一样(用enaml/chaco制作):
我在示例或PyQtGraph小部件列表中找不到这样的内容.也许可以使用Qt的小部件并将其链接到PyQtGraph绘图对象?
这是我的代码。
from pyqtgraph.Qt import QtGui
import numpy as np
import pyqtgraph.opengl as gl
from netCDF4 import Dataset
import sys
def main():
app = QtGui.QApplication(sys.argv)
w=gl.GLViewWidget()
w.show()
w.setCameraPosition(distance=150)
#just my data
data=Dataset('200707.nc')
prec=data.variables['Prec'][5,:59,:59]
p = gl.GLSurfacePlotItem(z=prec[:] ,shader='heightColor')
p.shader()['colorMap'] = np.array([0.2, 2, 0.5, 0.2, 1, 1, 0.2, 0, 2])
w.addItem(p)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我认为问题可能出在库与我的 Mac 像素布局的交互中。真的不确定它可能是什么或如何解决它。我应该考虑使用不同的程序吗?
我有一个与以下问题非常相似的应用程序:画半条无限线?
我想有多个阈值的无限线。
问题中提供的解决方案是一个很好的起点:https : //stackoverflow.com/a/37836348/7163293
我试图通过在中修改movable
属性__init__
并添加一个setMovable
方法来使线可移动,就像在source中的源代码一样:
from pyqtgraph.Qt import QtGui
import numpy as np
import pyqtgraph as pg
class InfiniteLineWithBreak(pg.GraphicsObject):
def __init__(self, changeX, levelsY, pen=None):
pg.GraphicsObject.__init__(self)
self.changeX = changeX
self.levelsY = levelsY
self.maxRange = [None, None]
self.moving = False
self.movable = True
self.setMovable(self.movable)
self.mouseHovering = False
pen = (200, 200, 100)
self.setPen(pen)
self.setHoverPen(color=(255,0,0), width=self.pen.width())
self.currentPen = self.pen
def setMovable(self, m):
"""Set whether the line is movable by the user."""
self.movable = …
Run Code Online (Sandbox Code Playgroud)