私はion()
メソッドを試してみましたが、データ量は少なくても問題ありませんが、比較的速く大きな画像や画像をストリーミングすると、この方法は非常に遅いです。私が理解しているところでは、ion()
は、あなたが望むものではないかもしれない軸やラベルなど、あなたのFigureを変更するたびにすべてを描き直します。
import time
import numpy
import matplotlib.pyplot as plt
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.set_title("My Title")
im = ax.imshow(numpy.zeros((256, 256, 3))) # Blank starting image
fig.show()
im.axes.figure.canvas.draw()
tstart = time.time()
for a in xrange(100):
data = numpy.random.random((256, 256, 3)) # Random image to display
ax.set_title(str(a))
im.set_data(data)
im.axes.figure.canvas.draw()
print ('FPS:', 100/(time.time() - tstart))
私は上記のコードで私のマシン上では約30 FPSを得る:
This threadは、ここで私はこれを行う方法を示したことの単純な例です
もの
を行うための非常に良くする方法を示しています。私が代わりに
im.axes.figure.canvas.draw()
と
im.set_data(data)
の
plt.ion()
と
ax.imshow(data)
と同じことを実行すると、私は約1 FPS
これは私の場合のループの最後の画像を表示します – mcExchange
これは機能しました!私は '%matplotlib qt'を追加して、Pythonプロットを外部のウィンドウにする必要がありました。また、この答えは爽やかでコンパクトです – mcExchange