【问题标题】:pyqtgraph - Use arbitrary values for axis with ImageItempyqtgraph - 使用 ImageItem 轴的任意值
【发布时间】:2020-12-16 12:27:19
【问题描述】:

我觉得我在这里遗漏了一些明显的东西,但我没有在互联网上找到任何有用的东西。

我有一个使用 pyqtgraph 显示信号的应用程序。该信号有 1000 个样本,代表 0 - 0.5 范围内的值。 用正确的 X 轴值绘制它很简单 - 我只是制作了一个具有正确范围和元素数量的 linspace,并将其用作 plot 中的 x

但是如何对PlotWidget 中的ImageItem 执行相同的操作?它使用元素数量作为 X 轴,我无法弄清楚如何告诉它使用正确的值。

看一下屏幕截图 - 我需要为图像使用与下图相同的 X 轴值。

对于相关的代码位:
首先,我创建我的 X 值:

self.xval_h = numpy.linspace(0, 0.5, len(self.spectrum_h[-1]))
self.xval_v = numpy.linspace(0, 0.5, len(self.spectrum_v[-1]))

对于情节和图像的更新:

def update_spectrum(self):
    self.HSpectrum.plot(self.xval_h, self.spectrum_h[-1], clear=True)
    self.VSpectrum.plot(self.xval_v, self.spectrum_v[-1], clear=True)

def update_trace(self):
    self.image_h.setImage(numpy.array(self.spectrum_h).T)
    self.image_v.setImage(numpy.array(self.spectrum_v).T)

所以,问题归结为如何将我的xvals 与ImageItem(或包含ImageItemPlotWidget)一起使用?

非常感谢您的帮助!

【问题讨论】:

  • 也许,这个答案 (stackoverflow.com/a/41963986/11827059) 会对你有所帮助。
  • 我找到并尝试了。它原则上可以工作,但它会完全按照我指定的方式生成刻度。因此,对于全范围,我每一个值都会得到一个刻度,如果我减少刻度的数量,那么无论缩放级别是多少,都会应用相同的刻度。这意味着我需要手动将刻度密度调整为缩放级别。我正在寻找的是一种使用默认刻度行为将 0-1000 范围映射到 0-0.5 范围的好方法。

标签: python pyqtgraph


【解决方案1】:

您可以使用“setRect”定义图像的坐标并传递“QRectF(x,y,width,height)”(x,y 表示左上角或左下角,如果 pg.setConfigOptions(imageAxisOrder= "row-major") 已启用):

image_width = abs(self.xval_h[0]-self.xval_h[0])
image_height = abs(self.xval_h[0]-self.xval_h[0])  # if x and y-scales are the same
pixel_size = image_width/(self.xval_h.size-1)
self.image_h.setRect(QRectF(self.xval_h[0]-pixel_size/2, self.xval_h[0]-pixel_size/2, image_width, image_height))

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2014-05-17
    • 2015-06-03
    • 2015-10-24
    • 2012-08-29
    • 1970-01-01
    • 2017-12-19
    • 2017-07-30
    相关资源
    最近更新 更多