私はPyQtでデスクトップアプリケーションを開発しており、matplotlibを使ってデータ(32個の浮動小数点数のリスト)をプロットしています。データは埋め込まれたデバイスから一定の時間間隔で連続的に送られ、新しいデータが来るたびにアプリケーションに通知され、自動的に(接続経由で)データがキャンバスにプロットされます。これは期待どおりに動作します。matplotilb:既存のデータを使って軸だけを更新する
Y軸とX軸の単位選択を実装したいと思います。ラジオ選択ボタンを使用すると、Y軸には5つのオプションがあり、X軸には2つのオプションがあります。ユーザーがいずれかの軸の単位選択を変更すると、既存のデータを新しい単位選択で置換する必要があります。もう1つは、更新時にズームレベルを保持することです。
これは(ズームレベルを保持します)私の現在のプロット関数である:X軸の
def plot(self, spectrum: list):
spectrum = self.calculate_spectrum_values(spectrum)
self.line.set_data(self.x_dimension, spectrum)
self.canvas.draw()
単位選択は(ピクセルまたは波長)を示すために、どのユニットに影響を与えているとそれがないので、それは線形ですデータの形状に影響を与えます。 Y軸の単位選択は、calculate_spectrum_values()メソッドで何が起こるかに影響します。私は、異なる選択肢を持つデータに対して異なる数学を行います。ユニットの選択を変更する別の方法があります。 X軸の場合には、以下のようなものだ:新しいデータが約1秒間隔で来るので、その時に新しいデータは常に新しいユニットの選択により更新される内のように、測定は、実行されている場合
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