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 のイベント ループを実行します (マウス操作を可能にします)。