我正在用PyQt开发一个桌面应用程序,并使用matplotlib绘制数据(列表为32个浮点数)。数据通过一定的时间间隔持续来自嵌入式设备,每当新数据即将到来时,通知应用程序并自动(通过连接)将数据绘制到画布上。这按预期工作。matplotilb:只使用现有数据更新坐标轴
现在我想实现Y轴和X轴的单位选择。我使用无线电选择按钮,Y轴有五个选项,X轴有两个选项。当用户更改任一轴的单位选择时,现有数据应该用新的单位选择重新绘制。还有一件事是更新时应该保持缩放级别。
这是我当前的绘图功能(保持缩放级别):
def plot(self, spectrum: list):
spectrum = self.calculate_spectrum_values(spectrum)
self.line.set_data(self.x_dimension, spectrum)
self.canvas.draw()
单位选择,X轴只影响到哪些单位显示(像素或波长),它是线性的,因此不影响数据的形状。 Y轴的单位选择正在影响calculate_spectrum_values()方法中发生的情况,我对具有不同选择的数据做了不同的数学运算。我有另一种方法来改变单位选择。对于X轴这就像如下所示:在测量运行,因为新的数据来自大约一秒钟的时间间隔,使内的新数据时总是以新的单位选择更新
def set_xaxis(self):
if self.unit_selection_x == "Pixels":
self.axes.set_xlabel('pixel')
self.x_dimension = numpy.linspace(1, 32, 32)
elif self.unit_selection_x == "Wavelengths":
self.axes.set_xlabel('wavelength')
self.x_dimension = numpy.linspace(400, 700, 32)
else:
raise ValueError
self.axes.set_xlim(self.x_dimension.min(), self.x_dimension.max())
这个目前的实施工作好。但我希望这样做,以便单元选择独立于数据更新,并且在测量未运行时它也应起作用。在这种情况下,当单元选择改变时,它应该重新绘制现有的数据。怎么做?
其他问题是如何在单位选择更改时保持缩放级别。目前它总是进入默认状态,但我想要实现这一点,以便如果用户放大/缩小,单位选择更改后将显示相同的缩放位置。任何想法如何我可以同时保持缩放状态和更新轴?
简而言之,我如何更新matplotlib中的坐标轴,而不是触摸缩放或数据,而是使用现有的值?
看完这个,我有问题的理解实际的问题。什么是问题?什么答案需要包含来解决你的问题? – ImportanceOfBeingErnest
对不起,我同意这是非常糟糕的解释。我做了一些编辑,希望现在更容易理解。 – m5seppal