python - 如何将 pyqtgraph IsocurveItem 实例与空绘图轴(而不是 ImageItem)对齐?

标签 python pyqtgraph

问题

IsocurveItem 的 pyqtgraph 文档有用地建议使用此类绘制的轮廓可以通过 isocurve.setParentItem(image)ImageItem 实例对齐。但如果我不想显示图像数据,如何缩放轮廓输出以与给定的 X、Y 数据的轴正确对齐?

设置示例

使用此代码示例进行绘制:

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

# Setup
app = QtGui.QApplication([])
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')

win = pg.PlotWidget()
layout = pg.GraphicsLayout()
win.setCentralItem(layout)
ax = pg.PlotItem()
layout.addItem(ax)

# Generate data
x = np.linspace(0, 6.28, 30)
y = x[:]
xx, yy = np.meshgrid(x, y)
z = np.sin(xx) + np.cos(yy)

# Add data
ax.setXRange(x.min(), x.max())
ax.setYRange(y.min(), y.max())
c = pg.IsocurveItem(data=z, level=0.5, pen='r')
# c.setParentItem(ax)  # This doesn't work
ax.addItem(c)

# Finish up
win.show()
sys.exit(app.exec_())

输出如下:

enter image description here

或者,如果没有 setXRange 和 setYRange 部分,它看起来像这样:

enter image description here

我希望将第二个绘图中的绘图拉伸(stretch)以适合第一个绘图的轴。 所以,我想我只需要告诉 IsocurveItem 如何在给定 X、Y、Z 数据而不仅仅是 Z 的情况下挤压和对齐自身。我该怎么做?

附注等效的* matplotlib 轮廓调用将是 contour(x, y, z,levels=[0.5], color='r')

*必须处理轴顺序/行优先与列优先;没什么大不了的。

失败的解决方案

不可见的缩放 ImageItem

添加一个 ImageItem 并缩放它,然后使其不可见。尝试通过将其父项设置为 ImageItem 来使 IsocurveItem 缩放:

img = pg.ImageItem(z, axisOrder='row-major')
img.scale((x.max() - x.min()) / img.width(), (y.max() - y.min()) / img.height())
ax.addItem(img)
c.setParentItem(img)

ImageItem 会缩放,但 IsocurveItem 不会随之而来。

最佳答案

IsocurveItem通过GraphicsObject继承了.scale().translate()方法,其中它是一个子类。因此,只需在定义 c 后将这些行添加到示例中即可:

c.translate(x.min(), y.min())
c.scale((x.max() - x.min()) / np.shape(z)[0], (y.max() - y.min()) / np.shape(z)[1])

为了使测试更加严格,我还更改了 x,使其不从 0 开始:

x = np.linspace(10, 16.28, 30)

现在的输出是 enter image description here

在混合中使用 ImageItem 可能更容易可视化(也已翻译和缩放): enter image description here

关于python - 如何将 pyqtgraph IsocurveItem 实例与空绘图轴(而不是 ImageItem)对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51109208/

相关文章:

python - 将方法添加到python中加载的类/模块

python - 如何在 SQLAlchemy 中表示自定义 PostgreSQL 域?

python - 给定以下代码,变量 result 中存储的值是多少? Python

pyqtgraph - 将 pyqtgraph 添加到 PyQt6

ubuntu - 在ubuntu上安装pyqtgraph

python - 如何在Flask中上传多个文件?

python - Flask关系模型如果不存在则多次获取或创建

Python优化算法调整线越过尽可能多的点

Python:在pyqtgraph中,如何获取PlotWidget的轴范围

python - pyqtgraph - 导入错误 : No module named pyqtgraph