我为我的项目分叉了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)可以动态生成图像的功能.该函数为位于正方形内的图像(实际坐标)返回npx 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