while ループでのリアルタイム プロット: トラブルシューティング ガイド
リアルタイム プロットを作成しようとするときは、その理由を理解することが重要ですwhile ループ中にプロットの更新が期待どおりに行われない可能性があります。この特定の例では、OpenCV でカメラから取得したデータを視覚化するために matplotlib を使用してリアルタイム プロットを実装するときに問題が発生します。
問題を切り分けるために、簡略化されたサンプル コードが提示されました。
fig = plt.figure() plt.axis([0, 1000, 0, 1]) i = 0 x = list() y = list() while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show()
1,000 個のポイントが個別にプロットされることを期待しているため、コードは驚くべきことに最初のポイントのみを表示し、ループが完了するのを待ってから残りのポイントを入力します。グラフ。この動作は、matplotlib のデフォルト動作がプログラムの終了までグラフ全体を描画するまで待機するため発生します。
この制限を克服してリアルタイム プロットを実現するには、コード スニペットを次のように変更する必要があります。
import numpy as np import matplotlib.pyplot as plt plt.axis([0, 10, 0, 1]) for i in range(10): y = np.random.random() plt.scatter(i, y) plt.pause(0.05) plt.show()
ここでの主な違いは、plt.pause(0.05) が含まれていることです。この関数はプログラムの実行を 0.05 秒間一時停止し、データ ポイントのプロットと GUI のイベント ループの実行 (マウス操作が可能になります) の両方を可能にします。
この変更により、プロットは で更新されます。リアルタイムで、データセットに追加される各ポイントを表示します。
以上がMatplotlib リアルタイム プロットが While ループ内で更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。