我为我的项目分叉了BMDanalyse并对其进行了修改.
由于内存要求,需要64位系统.请确保您拥有64位Python 2.7.
以下设置说明适用于Windows或Ubuntu 上的Pycharm,但您希望在Windows上运行它,因为我的问题是制作.exe:
需要以下包.别忘了选择64位的.在提供链接的情况下,您不能简单地通过Pycharm安装软件包.
打开BMDanalyse项目后,您应该可以运行SPCanalyse.py
以启动应用程序.它有bug,是一个非常早期的原型.下载以下示例数据以确保其按预期工作.
如果按顺序执行,以下内容应该有效.您当然可以检查IDE的控制台以了解应用程序正在执行的操作(尚未添加进度条)
aligned.raw
应出现在"下载"文件夹中alignment.raw
图像.'alignment.raw'将出现在右侧列表中.单击alignment.raw.单击ROI,添加ROI - >多边形.绘制两个多边形,如下图所示:
ROI.raw
应该出现在您的下载文件夹中.ROI.raw.
单击它.单击时间过滤器.一段时间后dfoverf0_avg_framesIncl.raw
应该出现在您的下载文件夹中dfoverf0_avg_framesIncl.raw.
单击它.屏幕应该变黑.如果它们仍在那里,请删除ROI.现在点击黑色场景中的随机位置.你看到的是种子像素相关图如果所有这4个步骤都正常工作,那么应用程序就可以按照预期在您的系
但是,现在它正在工作,我需要一个独立的.exe这个应用程序,没有任何依赖只是为了向我的主管显示它可以完成.
如果我python SPCanalyse.py
在项目中使用我的主脚本,它会运行,我的应用程序会弹出.
更新:我的笔记本电脑被盗了.然而,在一个干净的系统上设置一切我遇到了不同的问题.我能想到的唯一一件不同的主要事情就是我不依赖于Continuum分析中的Anaconda进行包管理.
如果我pyinstaller SPCanalyse.py
在我的主脚本上使用,我会得到.exe,如果我运行.exe,我首先注意到我的图标丢失了.其次,这发生了:
当我按下对齐按钮(即通过设置中的步骤1)时,应用程序冻结(即没有响应),然后重复打开自身的新的等级.我假设这是与内存相关的,因为此操作确实需要大量的内存.如果我看一下应用程序占用了多少内存(仅查看原始的"无响应"实例),我每次都看到它的平均值为1,180.8MB.考虑到所有其他正在运行的进程,尽管我仍然只使用了32%内存的28%.我已经尝试将应用程序的优先级设置为高到无效.我也尝试通过命令提示符打开,看看我是否收到任何有用的错误消息.可悲的是没有.
请注意,步骤2-3按预期工作!单击黑色场景后,步骤4将产生相同的递归开放循环.
我想我找到了这里发生的事情的解释:https: //github.com/rdicosmo/parmap
当然,如果您碰巧有开放频道,文件或其他只应由父进程使用的连接,您的程序可能会以非常奇怪的方式运行:例如,在调用之前不要打开图形窗口Parmap原语,如果您的程序是多线程的,请不要使用此库!
因此我很确定我使用parmap非常错误.我仍然困惑为什么我的应用程序工作,如果我通过我的IDE运行我!
pyinstaller SPCanalyse.py
当我尝试运行生成的.exe时,如果我在我的主脚本上使用以下输出
D:\Home\Downloads\BMDanalyse\BMDanalyse>D:\Home\Downloads\BMDanalyse\BMDanalyse\
dist\SPCanalyse\SPCanalyse.exe
Traceback …
Run Code Online (Sandbox Code Playgroud) 我不知道如何在pyqtgraph中实现实时绘图.该文档的实现尚未在文档中实现.
有谁可以提供一个简单的例子?
我正在使用PySide.在里面QMainWindow
,我有一个ImageItem
显示在里面PlotWidget
.
假设我有一个generateImage(r, np)
可以动态生成图像的功能.该函数为位于正方形内的图像(实际坐标)返回np
x np
像素数组(-r, -r)-(r, r)
.我希望轴显示真实坐标,而不是像素坐标.
我的代码实际上是这样的:
graph = PlotWidget()
image = ImageItem()
graph.addItem(image)
graph.setAspectLocked(True) # to keep the pixels square
r = 10e-6 # 10 µm
np = 101 # but should be related to number of pixels in the window
image.setImage(generateImage(r, np))
image.setRect(QRectF(-r, -r, 2*r, 2*r))
Run Code Online (Sandbox Code Playgroud)
我的猜测是使用sigRangeChanged
信号来检测视图中的变化.但是,我不确定如何检测窗口的大小和分辨率,以及如何正确更新图像.
我天真地尝试做这样的事情:
graph.sigRangeChanged.connect(updateRange)
def updateRange(view, rng):
r = max(abs(rng[0][0]), abs(rng[0][1]),
abs(rng[1][0]), abs(rng[1][1]))
image.setImage(generateImage(r, np)) …
Run Code Online (Sandbox Code Playgroud) 对于电生理学数据分析集,我需要绘制一个大的2D阵列(昏暗的约20.000 x 120)点.我曾经在我的PyQt应用程序中嵌入了一个Matplotlib小部件,但是寻找其他解决方案因为绘图花了很长时间.尽管如此,使用pyqtgraph绘制数据也需要比预期更长的时间,这可能是因为它在每次使用plot()函数时都会重新绘制小部件.
绘制大型数组的最佳做法是什么?
pyqtgraph的例子虽然广泛,但对我没有太大的帮助......
import pyqtgraph as pg
view = pg.GraphicsLayoutWidget()
w1 = view.addPlot()
for n in data:
w1.plot(n)
Run Code Online (Sandbox Code Playgroud)
要么
w1.plot(data)
Run Code Online (Sandbox Code Playgroud)
最后一条规则生成ValueError:操作数无法与形状一起广播(10)(10,120)
提前致谢....
我最近在将 pyqt 从 PyQt4 更新到 PyQt5 后开始使用 PyQt5,并注意到使用 pyqtgraph 生成的所有绘图的轴位置存在持续错误(参见附图)。x 轴不延伸穿过窗口底部,y 轴不与左下角的 x 轴连接。此外,在较大的 x 值或较小的 y 值处,轨迹不能由轴标签准确地表示。
下图是通过运行产生的:
import pyqtgraph as pg
pg.plot([0,1,2,3,4,5,6,7,8,9],[1,2,4,5,7,8,10,11,13,14])
Run Code Online (Sandbox Code Playgroud)
我在我的 Windows 10 机器上使用 anaconda 创建了一个新的 python 环境来测试这个问题。conda list qt的输出是:
pyqt 5.6.0 py35_2
pyqtgraph 0.10.0 py35_0
qt 5.6.2 vc14_5 [vc14]
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同版本的 Python(3.5.3 和 3.6)并删除并重新安装所有 anaconda 发行版,但没有成功。我真的很感激任何有关这个问题的帮助。提前致谢。
编辑 1:我应该提到我是在外部显示器上运行这个程序的。我刚刚发现,如果我将绘图窗口拖动到较小的笔记本电脑显示屏上,轴就会捕捉到正确的位置。我仍然没有发现如何在外部显示器上正确显示绘图,但我怀疑它可能与 QT DPI 缩放环境变量有关。
我是 PyQtGraph 的新手,需要帮助在 x 轴上绘制日期时间对象,这可以使用 matplotlib 轻松完成。任何帮助,将不胜感激。
作为 Id 想要做的简单版本,请参见下面我想绘制的日期时间对象,该对象显示为 x 轴上的刻度。
代码抛出错误,因为这无法完成。
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import datetime
datetimes = ['2014-10-01 00:00:00', '2014-10-02 00:00:00', '2014-10-03 00:00:00']
x = [datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S') for i in datetimes]
y = [1,2,3]
win = pg.GraphicsWindow(title = 'plotting')
p1 = win.addPlot(row=1, col=0, title = 'test')
p1.plot(x,y)
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) 我想知道如何设置为pyqtgraph.GraphicsWindow.addPlot对象显示的x和y轴限制.我需要在循环中显示大量数据(因此使用pyqtgraph)但我宁愿预先分配我的轴而不是允许自动量程可能提高速度.举个例子,
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
app = QtGui.QApplication([])
win = pg.GraphicsWindow(title="My plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
p1 = win.addPlot(title="plot1")
p2 = win.addPlot(title="plot2")
curve1 = p1.plot(pen='y')
curve2 = p1.plot(pen='r')
curve3 = p2.plot(pen='b')
x = np.linspace(0,10,1000)
x_current = x[0]
p1.setXRange((5,20), padding=0)
for i in range(1,len(x)):
x_current = np.append(x_current,x[i])
curve1.setData(x_current,np.sin(x_current))
curve2.setData(x_current,np.cos(x_current))
curve3.setData(x_current,np.tan(x_current))
app.processEvents()
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)
问题在于线p1.setXRange((5,20),padding=0)
.这会导致错误:TypeError:setXRange()至少需要3个参数(给定3个)
我认为这应该是一个非常简单的问题,只需在绘图前设置轴范围.
我正在运行文档中的一些基本代码
import pyqtgraph as pg
import numpy as np
x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
plotWidget.plot(x, y[i], pen=(i,3))
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,窗户打开然后立即关闭,我只是看到它的闪烁.是否有某种功能可以保持窗户打开?
谢谢
我在 Python 3.6.2(32bit) 和 Windows 10 上使用 PyQtGraph '0.9.8+gd627e39'。
我的目标是使用显示日期时间的 X 轴绘制实时数据。
Time Value
datetime.datetime(2018, 3, 1, 9, 36, 50, 136415) 10
datetime.datetime(2018, 3, 1, 9, 36, 51, 330912) 9
datetime.datetime(2018, 3, 1, 9, 36, 51, 382815) 12
datetime.datetime(2018, 3, 1, 9, 36, 52, 928818) 11
...
Run Code Online (Sandbox Code Playgroud)
查了https://gist.github.com/friendzis/4e98ebe2cf29c0c2c232 , pyqtgraph , plotting time series等相关问题
,但还是很难掌握怎么用DateAxisItem
我尝试使用该模块制作一个简单的代码,
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
from datetime import datetime
from time import time …
Run Code Online (Sandbox Code Playgroud) 我想在x轴上显示刻度的字符串值pyqtgraph
.现在我无法弄清楚如何做到这一点.
例如:
x = ['a', 'b', 'c', 'd', 'e', 'f']
y = [1, 2, 3, 4, ,5, 6]
pg.plot(x, y)
Run Code Online (Sandbox Code Playgroud)
当我尝试将字符串数组传递给x
变量时,它会尝试将其转换为float并使用错误消息中断GUI.
pyqtgraph ×10
python ×8
pyqt ×4
pyqt4 ×3
python-2.7 ×2
qt ×2
axis ×1
datetime ×1
executable ×1
graph ×1
plot ×1
pyinstaller ×1
pyqt5 ×1
windows-10 ×1