ホームページ > バックエンド開発 > Python チュートリアル > Matplotlib リアルタイム プロットが While ループ内で更新されないのはなぜですか?

Matplotlib リアルタイム プロットが While ループ内で更新されないのはなぜですか?

DDD
リリース: 2024-12-04 19:23:15
オリジナル
302 人が閲覧しました

Why Doesn't My Matplotlib Real-Time Plot Update Inside a While Loop?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート