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()

この例では、1000 個のポイントが個別にプロットされるものと予想されます。実際には、最初のポイントが表示されたウィンドウがポップアップ表示され (これで問題ありません)、その後、ループが終了するのを待ってから、グラフの残りの部分が表示されます。

ポイントが 1 つずつ表示されないのはなぜだと思いますか?

ベストアンサー1

問題のコードが動作するバージョンは次のとおりです (少なくとも 2011 年 11 月 14 日の Matplotlib バージョン 1.1.0 が必要です)。

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)。これは、新しいデータを描画し、GUI のイベント ループを実行します (マウス操作を可能にします)。

おすすめ記事