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

2024-10-01 00:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

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

我希望第二个绘图区的绘图被拉伸以适合第一个绘图区的轴。 所以,我想我只需要告诉IsocurveItem如何压缩和对齐给定的X,Y,Z数据,而不是Z。我该怎么做呢?在

另外,*matplotlib contour调用将是contour(x, y, z, levels=[0.5], colors='r')。在

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

失败的解决方案

不可见缩放图像项

添加一个ImageItem并对其进行缩放,然后使其稍后不可见。通过将其父级设置为ImageItem,尝试使IsocurveItem缩放:

^{pr2}$

ImageItem缩放,但IsocurveItem不适合乘坐。在


Tags: 数据import绘图datanp绘制axwin
1条回答
网友
1楼 · 发布于 2024-10-01 00:23:02

IsocurveItem通过GraphicsObject继承了.scale()和{}方法,它是其中的一个子类。因此,只需在定义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开始:

^{pr2}$

输出现在是 enter image description here

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

相关问题 更多 >